requests库发送请求时urlencode的坑

在使用Python的requests库发送带有特殊字符的URL参数时,发现requests未对部分字符进行正确的URL编码,如==未转换为%3d%3d,导致前后端参数不一致,验签失败。本文详细解析问题原因及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今日写公司的验签脚本时,发现requests库给服务端发送请求时,没有对URL参数中的=进行加密,导致验签算法得到的值错误,仅此记录,我用的requests版本是2.23.0版本,以下是请求示例

Python发送requests接口时的参数如下

ur = "http://111.11.40.21/cinema/address/?sessid=E1MDk0OTE==&city=杭州"
res = requests.get(url=ur)

到服务器端接收到的url是

GET /cinema/address/?sessid=E1MDk0OTE==&city=%E6%9D%AD%E5%B7%9E HTTP/1.1" 200 24 "-" "python-requests/2.23.0

通过后端的请求日志可以看到杭州已经被urlencode了,但是sessid参数里的==号却没有被urlencode,正常情况下==会被转换成%3d%3d,但是requests发出去的请求却没有进行编码,最后查看源码发现,requests库底层把这些字符排除了!!!而我写验签算法时没有排除这些,造成了我算验签拿到的参数是全部都编码的,但是requests发送请求时会排除一些字符不进行编码,后台拿到的参数跟我验签时用的参数不一致,导致验签失败,所以还是要多看源码啊!!!!

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值