Python请求更改了GET请求的参数

时间:2014-05-05 11:17:17

标签: python python-requests

params = {'token': 'JVFQ%2FFb5Ri2aKNtzTjOoErWvAaHRHsWHc8x%2FKGS%2FKAuoS4IRJI161l1rz2ab7rovBzGB86bGsh8pmDVaW8jj6AiJ2jT2rLIyt%2Bbpm80MCOE%3D'}
rsp = requests.get("http://xxxx/access", params=params)
print rsp.url
print params

打印rsp.url时,我

http://xxxx/access?token=JVFQ%252FFb5Ri2aKNtzTjOoErWvAaHRHsWHc8x%252FKGS%252FKAuoS4IRJI161l1rz2ab7rovBzGB86bGsh8pmDVaW8jj6AiJ2jT2rLIyt%252Bbpm80MCOE%253D    
JVFQ%2FF
JVFQ%252FF

网址中?token=的值与params['token']不同 为什么会改变?

2 个答案:

答案 0 :(得分:3)

您传入了网址编码值,但requests为您编码了值。结果,该值被编码两次; %字符编码为%25

不要传入URL编码的值。如果必须,请手动解码:

from urllib import unquote

params['token'] = unquote(params['token'])

答案 1 :(得分:0)

网址使用特殊类型的语法。 %字符是URL中的保留字符。它用作转义字符,允许您键入其他字符(例如空格,@和%本身)。

请求会在必要时自动将URL编码为正确的语法。必须将%键移到"%25"。换句话说,URL参数从未更改过。他们是一样的。该URL只是编码为正确的语法。你放在哪里"%"它被编码为"%25"

的正确形式

如果您需要,可以在此处查看网址语法信息: http://en.wikipedia.org/wiki/Uniform_resource_locator#Syntax

您可以在此处对URL进行编码/解码。尝试编码"%"或尝试解码"%25"看看你得到了什么: http://www.url-encode-decode.com/