python添加pythonhome参数_在Python中向给定的URL添加参数

为什么

我对这个页面上的所有解决方案都不满意(拜托,我们最喜欢的复制粘贴工具在哪里?所以我根据答案写了自己的。它试图更完整,更Python。我为参数中的dict和bool值添加了一个处理程序,以便更方便用户(JS)使用,但它们仍然是可选的,您可以删除它们。

工作原理

测试1:添加新参数、处理数组和Bool值:url = 'http://stackoverflow.com/test'

new_params = {'answers': False, 'data': ['some','values']}

add_url_params(url, new_params) == \

'http://stackoverflow.com/test?data=some&data=values&answers=false'

测试2:重写现有参数,处理DICT值:url = 'http://stackoverflow.com/test/?question=false'

new_params = {'question': {'__X__':'__Y__'}}

add_url_params(url, new_params) == \

'http://stackoverflow.com/test/?question=%7B%22__X__%22%3A+%22__Y__%22%7D'

说话很便宜。给我看看密码

代码本身。我试着详细描述一下:from json import dumps

try:

from urllib import urlencode, unquote

from urlparse import urlparse, parse_qsl, ParseResult

except ImportError:

# Python 3 fallback

from urllib.parse import (

urlencode, unquote, urlparse, parse_qsl, ParseResult

)

def add_url_params(url, params):

""" Add GET params to provided URL being aware of existing.

:param url: string of target URL

:param params: dict containing requested params to be added

:return: string with updated URL

>> url = 'http://stackoverflow.com/test?answers=true'

>> new_params = {'answers': False, 'data': ['some','values']}

>> add_url_params(url, new_params)

'http://stackoverflow.com/test?data=some&data=values&answers=false'

"""

# Unquoting URL first so we don't loose existing args

url = unquote(url)

# Extracting url info

parsed_url = urlparse(url)

# Extracting URL arguments from parsed URL

get_args = parsed_url.query

# Converting URL arguments to dict

parsed_get_args = dict(parse_qsl(get_args))

# Merging URL arguments dict with new params

parsed_get_args.update(params)

# Bool and Dict values should be converted to json-friendly values

# you may throw this part away if you don't like it :)

parsed_get_args.update(

{k: dumps(v) for k, v in parsed_get_args.items()

if isinstance(v, (bool, dict))}

)

# Converting URL argument to proper query string

encoded_get_args = urlencode(parsed_get_args, doseq=True)

# Creating new parsed result object based on provided with new

# URL arguments. Same thing happens inside of urlparse.

new_url = ParseResult(

parsed_url.scheme, parsed_url.netloc, parsed_url.path,

parsed_url.params, encoded_get_args, parsed_url.fragment

).geturl()

return new_url

请注意,可能会有一些问题,如果您找到问题,请让我知道,我们会让这件事变得更好

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值