如何向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错误
- 将该字符串拼接成完整URL后在浏览器中可得到正确结果,但用
已确认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
相关产品推荐
相关产品推荐

