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

时间:2014-01-10 16:15:02

标签: python python-requests url-encoding

我正在使用Kenneth Retiz的优秀请求包来发出网络请求。 Requests Github repository

有时我需要传递逗号分隔的参数,但逗号不是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)

感谢。

1 个答案:

答案 0 :(得分:2)

当您说“我的网址看起来像这样: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,如流式传输,证书验证等。