当前位置:  开发笔记 > 编程语言 > 正文

Python请求:标头名称无效

如何解决《Python请求:标头名称无效》经验,为你挑选了1个好方法。

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

Traceback (most recent call last):

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

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'

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

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

Gabriel Ilha.. 5

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

headers = {'user-agent': 'alsotesting', ':hello': 'test'}

headers = {'user-agent': 'alsotesting', 'hello': 'test'}

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

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



1> Gabriel Ilha..:

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

headers = {'user-agent': 'alsotesting', ':hello': 'test'}

headers = {'user-agent': 'alsotesting', 'hello': 'test'}

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

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


这个答案不能解决问题
我意识到了这一点,但是某些标题(例如instagram)的名称中有一个冒号,那么如何防止它们出现?puu.sh/m1iu4/0e7a71362a.png
推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有