Python请求无法使用相同的密钥发送多个标头

Ste*_*fan 5 python python-requests

我正在尝试向具有两个具有相同名称但不同值的标头的服务器发送get请求:

url = 'whatever'
headers = {'X-Attribute':'A', 'X-Attribute':'B'}
requests.get(url, headers = headers)
Run Code Online (Sandbox Code Playgroud)

这显然不起作用,因为标题字典不能包含两个键X-Attribute.

有什么我可以做的,即我可以将标题作为字典之外的其他内容传递吗?以这种方式发送请求的要求是服务器的一项功能,我无法对其进行更改.

mat*_*ata 6

requests将请求标头存储在a中dict,这意味着每个标头只能出现一次.因此,如果不对requests库本身进行更改,则无法发送具有相同名称的多个标头.

但是,如果服务器符合HTTP1.1,则它必须能够接受与具有单个值的逗号分隔列表的一个标头相同的标识符.

  • 我永远不会建议这个作为答案,但你可以尝试利用请求不会自动转义传递的头文件dict的内容,并传递`headers = {'X-Attribute':'name = value\r \n \nX-Attribute:name = value'}`.然而,这不是一个很好的解决方案...... (4认同)

use*_*968 5

请求使用urllib2.urlencode(或类似的东西)来编码标题.

这意味着可以将元组列表作为有效负载参数而不是字典发送,从而将字典列表从字典强加的唯一键约束中释放出来.urlib2.urlencode文档中描述了发送元组列表. http://docs.python.org/2/library/urllib.html#urllib.urlencode

以下代码将解决问题,而不会扁平或脏乱:

url = 'whatever'
headers = [('X-Attribute', 'A'),
           ('X-Attribute', 'B')]
requests.get(url, headers = headers)
Run Code Online (Sandbox Code Playgroud)

  • 这似乎不适用于我的请求版本 (2.7.0)。 (2认同)