Python3 requests空格编码异常问题排查及根因分析
带空格的请求参数无法正确传递问题解决
一开始以为是个简单问题,结果因为太基础反而搜不到解决方案。当请求参数包含空格时(比如name值为Test with space),Python脚本发送的请求无法返回预期结果,但手动访问https://www.example.com/api/card/list/?q=Test+with+space却能正常得到数据。
初始代码
url = "https://www.example.com/api/card/list/?q=" + name r = requests.get(url)
修改后仍未解决的代码
尝试用urllib.parse.urlencode处理参数,问题依旧:
payload = {'q': name} params = urllib.parse.urlencode(payload, quote_via=urllib.parse.quote) url = "https://www.example.com/api/card/list/" r = requests.get(url, params=params)
根因排查
后续发现请求通过HTTP代理发送到目标站点,问题根源在于Cloudflare的重定向机制:Cloudflare会将所有www子域名的流量重定向到主域名,并且在重定向过程中对请求参数进行了二次编码。原本已正确编码的空格会被再次转义,导致服务器无法识别原始参数。
解决方案
直接请求不带www的主域名,跳过Cloudflare的www重定向流程,让requests库正常处理参数编码即可:
payload = {'q': name} url = "https://example.com/api/card/list/" r = requests.get(url, params=payload)
内容的提问来源于stack exchange,提问作者Sugitime
相关产品推荐
相关产品推荐

