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

如何向Python requests.get()传递带双引号的参数

问题描述

某API要求参数需以双引号形式传递,例如有效请求URL为:https://example.com/api?country="US"。但使用Python的requests库调用时始终返回500响应,已尝试以下方法:

  • params = {"country": '"US"'}
  • params = {"country": "\"US\""}
    • 上述方式生成的URL无法被API正确识别带引号的参数
  • params = urlencode({"country": '"US"'}),生成编码字符串country=%22US%22
    • 将该字符串拼接成完整URL后在浏览器中可得到正确结果,但用requests.get(url, headers=headers, params=params)调用仍返回500错误

已确认API本身功能正常(浏览器测试有效),问题出在请求URL的格式处理上,询问传递这类带双引号的参数时遗漏了什么要点?


解决办法

核心问题是requests的params参数会自动对内容进行URL编码——如果你直接传入已经通过urlencode处理后的字符串,requests会把%22再次编码成%2522,最终参数变成country=%2522US%2522,API自然无法识别。

给你几个可行的解决方案:

方案1:手动拼接完整URL

跳过requests的参数自动处理逻辑,直接把编码后的参数拼接到基础URL末尾:

import requests

base_url = "https://example.com/api"
encoded_param = "country=%22US%22"
full_url = f"{base_url}?{encoded_param}"
response = requests.get(full_url, headers=headers)

方案2:单独编码参数值后传入params

用urllib.parse.quote对带引号的参数值做一次URL编码,再传入params,这样requests不会重复编码:

import requests
from urllib.parse import quote

params = {"country": quote('"US"')}
response = requests.get("https://example.com/api", headers=headers, params=params)

方案3:构造PreparedRequest(应急方案)

如果前两种方法都不行,可以直接构造请求对象,避免requests的自动编码:

import requests
from urllib.parse import urlencode

url = "https://example.com/api"
params = urlencode({"country": '"US"'})
req = requests.Request('GET', f"{url}?{params}", headers=headers)
prepared = req.prepare()
with requests.Session() as sess:
    response = sess.send(prepared)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:13:12