为什么Python3发送HTTP请求时手动URL编码不生效?
问题核心原因
你对URL参数做了两次编码,导致服务端接收到的参数值不符合预期:
requests库的get方法接收params参数时,会自动对字典内的所有键、值执行URL编码,不需要开发者手动提前处理- 你提前用
urllib.parse.quote_plus()对text做了一次编码后,requests会对已经编码的结果再做第二次编码,等于转义了两次
测试样例验证
你给出的测试文本为#Thisisgreat#, yes!,两次编码的流程如下:
- 手动执行一次quote_plus编码后得到:
%23Thisisgreat%23%2C+yes%21 - requests自动对上述结果做第二次编码,最终发送到服务端的参数为:
%2523Thisisgreat%2523%252C%2Byes%2521 - 服务端仅会做一次URL解码,拿到的内容是
%23Thisisgreat%23%2C+yes%21,和原始文本完全不符,自然返回错误结果
修复方法
直接删除text = urllib.parse.quote_plus(text)这行代码即可,requests会自动完成所有参数的URL编码操作,无需手动处理。
额外提示:你当前的代码没有导入
urllib.parse模块,如果保留手动编码逻辑运行时会直接抛出NameError,不过你的场景完全不需要手动编码,直接删除该行即可。
内容的提问来源于stack exchange,提问作者marlon
相关产品推荐
相关产品推荐

