基于 `urllib.parse` 和 `pathlib` 的面向对象URL
项目描述
依赖关系
安装
pip install urlpath
示例
导入
>>> from urlpath import URL
创建对象
>>> url = URL( ... 'https://username:password@secure.example.com:1234/path/to/file.ext?field1=1&field2=2&field1=3#fragment')
表示
>>> url URL('https://username:password@secure.example.com:1234/path/to/file.ext?field1=1&field2=2&field1=3#fragment') >>> print(url) https://username:password@secure.example.com:1234/path/to/file.ext?field1=1&field2=2&field1=3#fragment >>> url.as_uri() 'https://username:password@secure.example.com:1234/path/to/file.ext?field1=1&field2=2&field1=3#fragment' >>> url.as_posix() 'https://username:password@secure.example.com:1234/path/to/file.ext?field1=1&field2=2&field1=3#fragment'
访问 pathlib.PurePath 兼容的属性
>>> url.drive 'https://username:password@secure.example.com:1234' >>> url.root '/' >>> url.anchor 'https://username:password@secure.example.com:1234/' >>> url.path '/path/to/file.ext' >>> url.name 'file.ext' >>> url.suffix '.ext' >>> url.suffixes ['.ext'] >>> url.stem 'file' >>> url.parts ('https://username:password@secure.example.com:1234/', 'path', 'to', 'file.ext') >>> url.parent URL('https://username:password@secure.example.com:1234/path/to')
访问方案
>>> url.scheme 'https'
访问网络位置
>>> url.netloc 'username:password@secure.example.com:1234' >>> url.username 'username' >>> url.password 'password' >>> url.hostname 'secure.example.com' >>> url.port 1234
访问查询
>>> url.query 'field1=1&field2=2&field1=3' >>> url.form_fields (('field1', '1'), ('field2', '2'), ('field1', '3')) >>> url.form <FrozenMultiDict {'field1': ('1', '3'), 'field2': ('2',)}> >>> url.form.get_one('field1') '1' >>> url.form.get_one('field3') is None True
访问片段
>>> url.fragment 'fragment'
路径操作
>>> url / 'suffix' URL('https://username:password@secure.example.com:1234/path/to/file.ext/suffix') >>> url / '../../rel' URL('https://username:password@secure.example.com:1234/path/to/file.ext/../../rel') >>> (url / '../../rel').resolve() URL('https://username:password@secure.example.com:1234/path/rel') >>> url / '/' URL('https://username:password@secure.example.com:1234/') >>> url / 'http://example.com/' URL('http://example.com/')
替换组件
>>> url.with_scheme('http') URL('http://username:password@secure.example.com:1234/path/to/file.ext?field1=1&field2=2&field1=3#fragment') >>> url.with_netloc('www.example.com') URL('https://www.example.com/path/to/file.ext?field1=1&field2=2&field1=3#fragment') >>> url.with_userinfo('joe', 'pa33') URL('https://joe:pa33@secure.example.com:1234/path/to/file.ext?field1=1&field2=2&field1=3#fragment') >>> url.with_hostinfo('example.com', 8080) URL('https://username:password@example.com:8080/path/to/file.ext?field1=1&field2=2&field1=3#fragment') >>> url.with_fragment('new fragment') URL('https://username:password@secure.example.com:1234/path/to/file.ext?field1=1&field2=2&field1=3#new fragment') >>> url.with_components(username=None, password=None, query='query', fragment='frag') URL('https://secure.example.com:1234/path/to/file.ext?query#frag')
替换查询
>>> url.with_query({'field3': '3', 'field4': [1, 2, 3]}) URL('https://username:password@secure.example.com:1234/path/to/file.ext?field3=3&field4=1&field4=2&field4=3#fragment') >>> url.with_query(field3='3', field4=[1, 2, 3]) URL('https://username:password@secure.example.com:1234/path/to/file.ext?field3=3&field4=1&field4=2&field4=3#fragment') >>> url.with_query('query') URL('https://username:password@secure.example.com:1234/path/to/file.ext?query#fragment') >>> url.with_query(None) URL('https://username:password@secure.example.com:1234/path/to/file.ext#fragment')
修改查询
>>> url.with_query(field1='1').add_query(field2=2) URL('https://username:password@secure.example.com:1234/path/to/file.ext?field1=1&field2=2#fragment')
执行HTTP请求
>>> url = URL('https://httpbin.org/get') >>> url.get() <Response [200]> >>> url = URL('https://httpbin.org/post') >>> url.post(data={'key': 'value'}) <Response [200]> >>> url = URL('https://httpbin.org/delete') >>> url.delete() <Response [200]> >>> url = URL('https://httpbin.org/patch') >>> url.patch(data={'key': 'value'}) <Response [200]> >>> url = URL('https://httpbin.org/put') >>> url.put(data={'key': 'value'}) <Response [200]>
监禁
>>> root = 'http://www.example.com/app/' >>> current = 'http://www.example.com/app/path/to/content' >>> url = URL(root).jailed / current >>> url / '/root' JailedURL('http://www.example.com/app/root') >>> (url / '../../../../../../root').resolve() JailedURL('http://www.example.com/app/root') >>> url / 'http://localhost/' JailedURL('http://www.example.com/app/') >>> url / 'http://www.example.com/app/file' JailedURL('http://www.example.com/app/file')
尾部分隔符将被保留
>>> url = URL('http://www.example.com/path/with/trailing/sep/') >>> str(url).endswith('/') True >>> url.trailing_sep '/' >>> url.name 'sep' >>> url.path '/path/with/trailing/sep/' >>> url.parts[-1] 'sep' >>> url = URL('http://www.example.com/path/without/trailing/sep') >>> str(url).endswith('/') False >>> url.trailing_sep '' >>> url.name 'sep' >>> url.path '/path/without/trailing/sep' >>> url.parts[-1] 'sep'
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
urlpath-1.2.0.tar.gz (12.0 kB 查看哈希值)
构建分发
urlpath-1.2.0-py3-none-any.whl (8.3 kB 查看哈希值)
关闭
urlpath-1.2.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e54c0c82db4894a7217772150bdbc01413794576996e7834f81d67f22359c9d0 |
|
MD5 | 44ba2ac4b038794d57c0e171461fb41d |
|
BLAKE2b-256 | 21aae19a74232b82435d483aff27a37d411f1cbf3d478fc632180b7fe87a6396 |
关闭
urlpath-1.2.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9c175c4ce014e1c25bbc20984e75b2d05597cab915c3569b5e457acff2e692ad |
|
MD5 | 801886016606ea169ec6f4c0a35f697a |
|
BLAKE2b-256 | 23bcea728ff9db5e05361e021be4b2265d65b3277e607e87c46a4db9f105ea30 |