我正在使用python包请求向服务器发出get请求。我的目标是复制某些已知的http请求并将它们合并到我的python脚本中。原始查询字符串包含一个键值对'version = 0%2E12',我知道它是url编码的等效'version = 0.12'。下面是我正在做的复制http请求的示例。
params = {
'version'='0.12',
'language'='en',
...
}
resp = requests.get(url, params)
生成的url查询字符串中包含“version = 0.12”。如果我尝试将params的设置更改为以下内容,
params = {
'version'='0%2E12',
'language'='en',
...
}
但结果查询字符串包含'version = 0%252E31'。实质上,请求是将%解析为url编码。
如何在没有手动编写整个网址的情况下正确解析我的params参数请求?
答案 0 :(得分:2)
请注意,.
是网址编码值中完全有效的字符。
您需要自行编码值,绕过标准编码。我使用urllib.urlencode()
,然后手动将.
字符替换为%2E
。
然后,您必须将编码的字符串作为查询参数附加到URL,并将requests
配置为不重新编码值:
params = {
'version'='0.12',
'language'='en',
...
}
params = urllib.urlencode(params)
params = params.replace('.', '%2E')
resp = requests.get('?'.join(url, params), config={'encode_uri': False})
设置为encode_uri
的{{1}}参数可以解决问题;这是requests
default,否则将重新编码整个URL以确保RFC合规性。