python - 在 python3 请求中传递参数而不转义

标签 python python-requests url-encoding

我正在使用 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/

相关文章:

python - 无法从网页中抓取静态信息

Python:以 bool 值作为返回值的列表理解

python - 将旧网址重定向到更清洁的网址

Python Request 模块,即使使用 verify=False 也会出现 SSLError

Python 请求 SSL 问题

javascript - 在javascript中编码url而不是编码&

python - 了解 python GIL - I/O 绑定(bind)与 CPU 绑定(bind)

python - 如何检查列表是否已包含 Python 中的元素?

java - URL 编码对我的字符串进行两次编码

utf-8 - 数据 URI 中的字符集