Python requests修改GET请求参数

1 投票
2 回答
1969 浏览
提问于 2025-04-18 05:24
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'])

撰写回答