Python请求:标头名称无效

Rob*_*Rob 12 python python-requests

我正在尝试使用标题发送请求:":hello".但是,前导冒号会导致脚本无法正常运行,并发出此回溯:

Traceback (most recent call last):
Run Code Online (Sandbox Code Playgroud)

(为了我的隐私删除了前几行)

File "C:\Python27\lib\site-packages\requests\api.py", line 109, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "C:\Python27\lib\site-packages\requests\api.py", line 50, in request
    response = session.request(method=method, url=url, **kwargs)
  File "C:\Python27\lib\site-packages\requests\sessions.py", line 468, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Python27\lib\site-packages\requests\sessions.py", line 576, in send
    r = adapter.send(request, **kwargs)
  File "C:\Python27\lib\site-packages\requests\adapters.py", line 370, in send
    timeout=timeout
  File "C:\Python27\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 559, in urlopen
    body=body, headers=headers)
  File "C:\Python27\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 353, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "C:\Python27\lib\httplib.py", line 1057, in request
    self._send_request(method, url, body, headers)
  File "C:\Python27\lib\httplib.py", line 1096, in _send_request
    self.putheader(hdr, value)
  File "C:\Python27\lib\httplib.py", line 1030, in putheader
    raise ValueError('Invalid header name %r' % (header,))
ValueError: Invalid header name ':hello'
Run Code Online (Sandbox Code Playgroud)

这有解决方法吗?我的脚本是:

import requests
headers = {'user-agent': 'alsotesting', ':hello': 'test'}
requests.post("my server", headers=headers)
Run Code Online (Sandbox Code Playgroud)

Gab*_*rco 5

如您的错误所述,:header这不是有效的HTTP标头名称(您不能以“:”开头标头-请参阅文档)。你应该改变

headers = {'user-agent': 'alsotesting', ':hello': 'test'}
Run Code Online (Sandbox Code Playgroud)

headers = {'user-agent': 'alsotesting', 'hello': 'test'}
Run Code Online (Sandbox Code Playgroud)

编辑:HTTP / 2使用以冒号开头的伪标头字段(请参阅文档)。此外,作为解释在这里,你可能会看到一些头开始在Chrome的开发者工具冒号,当Chrome正在使用SPDY跟一个Web服务器,可发生-而且HTTP / 2(这是基于SPDY / 2),其中对应于伪标题。如文档中所述,伪头字段不是HTTP头字段

总之,标准HTTP协议不允许以冒号开头的标头字段,因此这就是为什么会Invalid header name出现错误的原因

  • 这个答案不能解决问题 (9认同)
  • 我意识到了这一点,但是某些标题(例如instagram)的名称中有一个冒号,那么如何防止它们出现?puu.sh/m1iu4/0e7a71362a.png (2认同)