Python requests修改GET请求参数
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
网址使用了一种特殊的语法。%这个符号在网址中是一个保留字符。它的作用是作为转义字符,让你可以输入其他字符,比如空格、@符号,还有%本身。
当需要的时候,系统会自动把网址编码成正确的语法。比如说,%这个符号需要被编码成"%25"。换句话说,网址的参数没有改变,还是一样的。只是网址被编码成了正确的格式。你在网址中每次看到的“%”,都会被转换成“%25”。
如果你想了解网址语法的信息,可以查看这里: http://en.wikipedia.org/wiki/Uniform_resource_locator#Syntax
你也可以在这里进行网址的编码和解码。试试编码“%”或者解码“%25”,看看会得到什么: http://www.url-encode-decode.com/
4
你传入了一个已经编码的URL值,但是requests
库会自动帮你编码这个值。所以,结果就是这个值被编码了两次;比如%
这个字符被编码成了%25
。
不要传入一个已经编码的URL值。如果必须这样做,记得手动解码:
from urllib import unquote
params['token'] = unquote(params['token'])