跳转到主要内容

一个自包含、易于重用的库,用于解析、操作、

项目描述

lazr.uri 包包括解析和处理 URI 的代码。

>>> import lazr.uri
>>> print('VERSION:', lazr.uri.__version__)
VERSION: ...

URI 类

>>> from lazr.uri import URI
>>> uri1 = URI('https://127.0.0.1/foo/bar?123')
>>> uri2 = URI('https://127.0.0.1/foo/bar/baz')
>>> uri1.contains(uri2)
True

以下两个是等效的,所以即使“外部”一个比“内部”一个短,答案也应该是 True。

>>> uri1 = URI('https://127.0.0.1/foo/bar/')
>>> uri2 = URI('https://127.0.0.1/foo/bar')
>>> uri1.contains(uri2)
True

以下两个完全相同。我们认为 URL 在其自身内部。

>>> uri1 = URI('https://127.0.0.1/foo/bar/')
>>> uri2 = URI('https://127.0.0.1/foo/bar/')
>>> uri1.contains(uri2)
True

在下一个案例中,url2 的字符串以 url1 的字符串开头。但是,因为 url2 在同一个路径步骤中继续,所以 url2 不在 url1 内部。

>>> uri1 = URI('https://127.0.0.1/foo/ba')
>>> uri2 = URI('https://127.0.0.1/foo/bar')
>>> uri1.contains(uri2)
False

这里,url2 是 url1 加一个额外的路径步骤。所以,url2 在 url1 内部。

>>> uri1 = URI('https://127.0.0.1/foo/bar/')
>>> uri2 = URI('https://127.0.0.1/foo/bar/baz')
>>> uri1.contains(uri2)
True

一旦解析了 URI,其部分就可以访问。

>>> uri = URI('https://fish.tree:8666/blee/blah')
>>> uri.scheme
'https'
>>> uri.host
'fish.tree'
>>> uri.port
'8666'
>>> uri.authority
'fish.tree:8666'
>>> uri.path
'/blee/blah'
>>> uri = URI('https://127.0.0.1/blee/blah')
>>> uri.scheme
'https'
>>> uri.host
'localhost'
>>> uri.port is None
True
>>> uri.authority
'localhost'
>>> uri.path
'/blee/blah'

RFC 3986 的语法不允许在查询组件中使用方括号,但第 3.4 节确实说明了如果在该组件中发现此类分隔符字符应该如何处理。

>>> uri = URI('http://www.apple.com/store?delivery=[slow]#horse+cart')
>>> uri.scheme
'http'
>>> uri.host
'www.apple.com'
>>> uri.port is None
True
>>> uri.path
'/store'
>>> uri.query
'delivery=[slow]'
>>> uri.fragment
'horse+cart'

在文本中查找 URI

lazr.uri 还知道如何从一大块文本中检索 URI 列表。这适用于查找错误跟踪器 URI 或类似用途。

find_uris_in_text() 函数返回一个迭代器,为文本中找到的每个 URI 生成 URI 对象。请注意,返回的 URI 已由 URI 类进行了规范化

>>> from lazr.uri import find_uris_in_text
>>> text = '''
... A list of URIs:
...  * https://127.0.0.1/a/b
...  * http://launchpad.net
...  * MAILTO:joe@example.com
...  * xmpp:fred@example.org
...  * http://bazaar.launchpad.net/%7ename12/firefox/foo
...  * http://somewhere.in/time?track=[02]#wasted-years
... '''
>>> for uri in find_uris_in_text(text):
...     print(uri)
https://127.0.0.1/a/b
http://launchpad.net/
mailto:joe@example.com
xmpp:fred@example.org
http://bazaar.launchpad.net/~name12/firefox/foo
http://somewhere.in/time?track=[02]#wasted-years

lazr.uri 的新闻

1.0.6 (2021-09-13)

  • 调整版本策略以避免导入 pkg_resources,这在大型环境中速度较慢。

1.0.5 (2020-06-29)

  • 为 lazr.uri.URI 添加显式的 __hash__ 方法。

1.0.4 (2020-06-12)

1.0.3 (2012-01-18)

  • 添加与 Python 3 的兼容性 (Thomas Kluyver)。

1.0.1 (2009-06-01)

  • 消除对 setuptools_bzr 的依赖,因此 sdists 不会带来 bzr ini 等。

1.0 (2009-03-23)

  • 在 PyPI 上首次发布

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪一个,请了解有关 安装软件包 的更多信息。

源分发

lazr.uri-1.0.6.tar.gz (18.2 kB 查看散列)

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面