Python请求:分块发布请求

时间:2020-01-21 13:44:34

标签: python-3.x python-requests chunked-encoding

我正在尝试使用headers["Transfer-encoding"] = "chunked"通过请求模块发送发布请求,但我回来了:

<BODY><h2>Bad Request - Invalid Content Length</h2><hr><p>HTTP Error 400. There is an invalid content length or chunk length in the request.</p>

我正在发送一个json字符串。还提供了headers["Content-Type"] = "application/json"。 有人知道我是否缺少某些设置吗?也许我应该在某个地方设置块大小?

分析附加到响应的请求的标头,实际上我得到的内容长度标头不为零。

我还尝试从json字符串创建一个自定义生成器,并将其作为data=传递到post方法,但它似乎只是挂在那儿(也在给定的timeout=之上)。

1 个答案:

答案 0 :(得分:1)

您的错误表明您没有正确创建请求(这是4xx错误,而不是5xx错误,这表明服务器出现了问题)。 Transfer-Encoding: chunked用于分块发送数据。当邮件的正文由未指定数量的块组成时,您可以用说-流的方式发送它们。我建议阅读this

每个块的大小都应在数据前面。例如:

HTTP/1.1 200 OK 
Content-Type: text/plain 
Transfer-Encoding: chunked

9\r\n
Some data\r\n 
6\r\n
Python\r\n

如果要使用python请求模块发送分块的请求。您可能需要一个生成器方法。请参阅this。信息这么少,我无能为力。