51 lines
1.3 KiB
Python
51 lines
1.3 KiB
Python
from six.moves.urllib import parse as urlparse
|
|
|
|
|
|
def url_parse_query(url):
|
|
"""
|
|
从 url 提取 query string 字典
|
|
:param url:
|
|
:return:
|
|
"""
|
|
return dict(urlparse.parse_qsl(urlparse.urlparse(url).query, True))
|
|
|
|
|
|
def url_without_query(url):
|
|
"""
|
|
移除 url 中 query string
|
|
"""
|
|
url = urlparse.urlparse(url)
|
|
return urlparse.urlunparse((url.scheme, url.netloc, url.path, url.params, '', url.fragment))
|
|
|
|
|
|
def build_url(base, additional_params=None):
|
|
"""
|
|
url 中增加 query string 参数
|
|
:param base:
|
|
:param additional_params:
|
|
:return:
|
|
"""
|
|
url = urlparse.urlparse(base)
|
|
query_params = {}
|
|
query_params.update(urlparse.parse_qsl(url.query, True))
|
|
if additional_params is not None:
|
|
query_params.update(additional_params)
|
|
for k, v in additional_params.items():
|
|
if v is None:
|
|
query_params.pop(k)
|
|
|
|
return urlparse.urlunparse(
|
|
(url.scheme, url.netloc, url.path, url.params, urlparse.urlencode(query_params), url.fragment)
|
|
)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
s = url_parse_query('http://api_w.qiange.so/hz/shorturl_tongji?short_url=BkPMeb')
|
|
print(s)
|
|
|
|
s = url_without_query('http://api_w.qiange.so/hz/shorturl_tongji?short_url=BkPMeb')
|
|
print(s)
|
|
|
|
s = build_url('http://www.baidu.com', {'a': 1, 'b': 2})
|
|
print(s)
|