我正在使用 Kenneth Retiz 提供的优秀请求包来发出网络请求。 Requests Github repository
有时我需要传入逗号分隔的参数,但逗号不是 url 编码的,即我的 url 看起来像这样
http://example.site.com/customers?fields=id,first_name,last_name
我不知道如何格式化查询参数才能像那样显示出来。逗号总是转义为 %2C。
我已经尝试了以下代码,但它不起作用:
params['fields'] = 'id,first_name,last_name'
url = 'http://example.site.com/customers'
ex = requests.get(url, params = params)
谢谢。
最佳答案
当您说“我的 url 看起来像这样:http://example.site.com/customers?fields=id,first_name,last_name
”时,我假设您的意思就是这样您的网址在您的浏览器中看起来像。浏览器如何向您显示 URL 的重要一点是,为了使其更易于阅读,它们会取消对 URL 的编码以供显示,但当您访问该 URL 时,它们实际上会发送编码版本。
正如 Rob 在对您的问题的评论中已经提到的,没有充分的理由发送未编码的逗号,但这并不意味着 Requests 不允许这样做,这只会让它变得非常困难。
处理好强烈警告后,就有办法做你想做的事:
from requests import Session, Request
request = Request('GET', 'https://httpbin.org/get')
prepared = request.prepare()
prepared.url += '?field=id,first_name,last_name'
session = Session()
response = session.send(prepared)
这很容易出错,因为您在添加自己的参数时没有完全检查任何内容,但这将帮助您实现问题中的要求。它回避请求为您做正确的事,并允许您做您想做的事。但是,我强烈建议您阅读更多高级文档,了解如何实现您可能期望从一般请求 API 获得的所有其他内容,如流式传输、证书验证等。
关于python - 在 python3 请求中传递参数而不转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21049152/