You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

httpx/requests处理含加号GET请求时编码异常问题咨询

为什么httpx/requests不会自动编码URL查询参数里的加号?

核心原因:URL编码规则的歧义

在URL的查询参数规范中,加号(+)被RFC定义为空格的等价替代符,所以httpx和requests这类HTTP库默认不会对加号进行编码——它们认为这里的加号是符合规范的合法字符,或是代表空格的替代,不需要转义。而空格属于明确需要编码的字符,因此会被自动转换为%20。

你的场景特殊点:巴西PIX二维码的加号是业务有效字符

巴西PIX二维码内容里的加号是实际业务需要的真实字符,并非空格的替代,这种场景不在HTTP库的默认编码逻辑覆盖范围内,因此必须手动处理编码。

正确处理方式

不要直接拼接URL字符串,优先使用库提供的params参数传递查询值,结合手动编码确保特殊字符被正确转义:

用requests实现

from urllib.parse import quote
import requests

url = 'https://<bankAPI>/qrcode'
qrcode_value = '00020101021126360014br.gov.bcb.pix0114+55489962650955204000053039865802BR5925TEREZINHA APARECIDA DEL S6008BRASILIA62070503***63040833'
# safe='' 指定编码所有非安全字符,包括加号
params = {'qrcode': quote(qrcode_value, safe='')}
response = requests.get(url, params=params)

用httpx实现

from urllib.parse import quote
import httpx

url = 'https://<bankAPI>/qrcode'
qrcode_value = '00020101021126360014br.gov.bcb.pix0114+55489962650955204000053039865802BR5925TEREZINHA APARECIDA DEL S6008BRASILIA62070503***63040833'
params = {'qrcode': quote(qrcode_value, safe='')}
response = httpx.get(url, params=params)

总结

  • HTTP库默认不编码加号是遵循RFC规范,将其视为空格的合法替代符
  • 当加号是业务所需的真实字符时,必须用urllib.parse.quote手动编码,safe=''参数可确保所有特殊字符被转义
  • 避免直接拼接URL与参数,使用params参数传递能减少其他潜在编码问题

内容的提问来源于stack exchange,提问作者Nicolas Enrique Bourbon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 15:22:46