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

如何阻止Python requests对URL中方括号等特殊字符进行自动编码

问题解答

设计原因

requests对[、{这类字符的强制编码是刻意设计:

  • 符合RFC 3986 URI规范要求:方括号属于保留字符,仅可在主机段表示IPv6地址时未编码使用,查询参数段出现默认需要编码
  • 编码行为出于安全和兼容性考虑:避免特殊字符导致不同服务端解析URL时出现歧义,降低参数注入、URL截断等安全风险

可行解决方案

你不需要切换到urllib,通过修改PreparedRequest的最终URL属性即可绕过自动编码逻辑,代码示例如下:

import requests

# 初始化会话
sess = requests.Session()
# 构造基础请求对象,无需拼接查询参数
req = requests.Request(method='GET', url='http://localhost:2017/api/httpLatency')
# 生成预请求对象
prepped_req = sess.prepare_request(req)
# 直接替换为你需要的完整URL,包含未编码的方括号,requests不会再做二次编码处理
prepped_req.url = "http://localhost:2017/api/httpLatency?whiches=[%7B%22id%22:26,%22_type%22:%22subscriptionServer%22,%22sub%22:1%7D]"
# 发送请求
response = sess.send(prepped_req)

注意事项

  • 该方案绕过了requests默认的URL合法性校验,你需要自行确保拼接后的URL格式符合目标服务端的要求
  • 你已经确认服务端支持未编码方括号,直接使用该方案即可满足需求

内容的提问来源于stack exchange,提问作者oeter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:54:04