您的位置:

处理urllib3出现报错InvalidHeader("Content-Length contained multiple ""unmatching values (%s)" % content_length)

  发布时间:2023-01-28 22:30:01
报错的原因urllib的错误通常是由于在请求头中Content-Length字段的值不匹配导致的。从请求头中删除Content-Length字段, 由urllib根据请求数据自动计算使用方法发送请求时,将headers参数设置为None,这样会自动生成请求头。检查你的代码中是否有多次设置Content-Length的情况。另外,当你使用requests库时,你可以使用下面这种方式此时你也不需要设置Content-Length了我明白了,在你的代码中多次设置Content-Length字段是另一个可能导致此错误的原因。

报错的原因

urllib3的InvalidHeader("Content-Length contained multiple ""unmatching values (%s)" % content_length)错误通常是由于在请求头中Content-Length字段的值不匹配导致的。这可能是由于请求中的数据与设置的Content-Length值不一致,或者是在请求头中多次设置了Content-Length字段而导致的。

如何解决

解决这个错误的方法有几种:

1. 确保请求中的数据与设置的Content-Length值一致。

2. 从请求头中删除Content-Length字段, 由urllib3根据请求数据自动计算Content-Length。

3. 使用HTTPConnectionPool.request()方法发送请求时,将headers参数设置为None,这样会自动生成请求头。

4. 检查你的代码中是否有多次设置Content-Length的情况。

使用例子

是的,以下是一个示例代码,它展示了如何使用HTTPConnectionPool.request()方法发送请求,并使用第三种方法解决Content-Length错误:


import urllib3

http = urllib3.PoolManager()
data = "some data for the request"
response = http.request("POST", "http://example.com", body=data, headers=None)

在这个例子中, headers参数被设置为None,这样urllib3就会自动生成请求头,并在请求中包含正确的Content-Length值。

另外,当你使用requests库时,你可以使用下面这种方式:


import requests

data = "some data for the request"
response = requests.post("http://example.com", data=data)

此时你也不需要设置Content-Length了

我明白了,在你的代码中多次设置Content-Length字段是另一个可能导致此错误的原因。

如果你使用的是urllib3库,你可以在请求头中检查是否存在Content-Length字段,如果存在,则删除它,然后重新设置正确的Content-Length值。

如果你使用的是requests库, 你可以在发送请求之前删除headers字典中的Content-Length键:


headers = {'Content-Length':'100'}
data = "some data for the request"
headers.pop('Content-Length', None)
response = requests.post("http://example.com", data=data, headers=headers)

这样就可以避免了Content-Length字段多次设置的问题。

如果你的请求是通过第三方库发送的, 你可能需要检查该库的文档以了解如何处理请求头。