Requests报”requests.exceptions.InvalidHeader: Invalid return character or leading space in header: {header} “的原因以及解决办法

  • Post category:Python

这个错误通常是由于请求头(headers)中存在非法字符或格式不正确导致的。以下是具体的原因和解决办法:

原因

  1. 非法返回字符或行首多余空格:有些headers以一个非法字符或空格开始,或者在header值中包含了返回字符(如换行、回车等)或语法错误,导致请求被拒绝。

  2. 错误的headers格式:headers应该是一个字典对象,但是如果传递的是字符串或其他格式的对象,则会抛出该异常。

解决办法

  1. 检查headers格式:确保headers是一个字典对象,且每个header的键值对应正确。
headers = {'Content-Type': 'application/json', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
  1. 检查headers中的每个值:确保headers中的每个值都是正确的字符串格式,没有多余的空格和回车等非法字符。
headers = {'Content-Type': 'application/json', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
for key, value in headers.items():
    if not isinstance(value, str):
        headers[key] = str(value).strip()
  1. 如果请求头中需要包含特殊字符,可以使用base64编码或urlencode进行编码。

例如,如果需要在header中包含密码,可以使用以下代码进行编码:

import base64
headers = {'Authorization': 'Basic ' + base64.b64encode(b'username:password').decode()}
  1. 如果请求头中包含非英文字符(如中文、日文等),可以将其进行Unicode编码。

例如,将”中文”转为Unicode编码可以使用以下代码:

headers = {'key': '\u4e2d\u6587'}

通过以上方法,就可以解决Requests报”requests.exceptions.InvalidHeader: Invalid return character or leading space in header: {header}”的问题了。