Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python请求-ChunkedEncodingError(e)-Requests.iter\u行_Python_Python Requests_Chunked Encoding_Http Chunked - Fatal编程技术网

Python请求-ChunkedEncodingError(e)-Requests.iter\u行

Python请求-ChunkedEncodingError(e)-Requests.iter\u行,python,python-requests,chunked-encoding,http-chunked,Python,Python Requests,Chunked Encoding,Http Chunked,我使用Python请求得到一个ChunkedEncodingError(e)。我使用以下方法来破解JSON: r = requests.get(url, headers=auth, stream=True) 以及使用回车符作为分隔符在每一行上进行迭代,这就是此API区分不同JSON事件的方式 for d in r.iter_lines(delimiter="\n"): d += "\n" sock.send(d) 我正在对回车进行定界,然后将其添加回端点,因为我将日志推送到的

我使用Python请求得到一个
ChunkedEncodingError(e)
。我使用以下方法来破解JSON:

r = requests.get(url, headers=auth, stream=True)
以及使用回车符作为分隔符在每一行上进行迭代,这就是此API区分不同JSON事件的方式

for d in r.iter_lines(delimiter="\n"):
    d += "\n"
    sock.send(d)
我正在对回车进行定界,然后将其添加回端点,因为我将日志推送到的端点实际上也期望在每个事件结束时返回回车。这似乎适用于大约10万个日志文件。当我尝试打一个更大的电话时,我会抛出以下命令:

for d in r.iter_lines(delimiter="\n"):
logs_1           |   File "/usr/local/lib/python2.7/dist-packages/requests/models.py", line 783, in iter_lines
logs_1           |     for chunk in self.iter_content(chunk_size=chunk_size, decode_unicode=decode_unicode):
logs_1           |   File "/usr/local/lib/python2.7/dist-packages/requests/models.py", line 742, in generate
logs_1           |     raise ChunkedEncodingError(e)
logs_1           | requests.exceptions.ChunkedEncodingError: ('Connection broken: IncompleteRead(0 bytes read)', IncompleteRead(0 bytes read))

更新:我发现API在某个时候也会发回一个
NoneType
。那么,我如何解释响应中某个地方的空字节而不破坏所有内容呢?每个事件都以
\n
结束,我需要能够单独检查每个事件。我是否应该将内容分块而不是
iter\u行
?然后确保区块中没有
NoneType
?这样,我就不会试图在一个
非类型的
上执行
iter\u行
,它就会爆炸?

ChunkedEncodingError
是由以下原因引起的:
httplib.incomplettedread

我想这可能是一个补丁。它允许您处理有缺陷的http服务器


大多数服务器传输所有数据,但由于实现错误,它们错误地关闭了会话,httplib引发了错误并掩埋了宝贵的字节。

正如我在这里发布的另一个人所提到的,您可以使用“With”子句来确保您以前的请求已关闭

 with requests.request("POST", url_base, json=task, headers=headers) as report:
    print('report: ', report)

谢谢你。在我的示例中,异常实际上是在
r.iter\u line()
上抛出的,那么上面的内容在哪里呢?我正在使用
请求
stream=True
,因此我不必首先将整个响应读入内存。作为澄清,这确实是一种有效的方法。它在python3中不起作用,但在那里您可以使用
requests.get(…,stream=True)
+
作为响应行。iter\u lines()
在try-except.For Python3中,您需要
导入http
并将
httplib
替换为
http.client
以及
except-httplib.IncompleteRead as e
我的实现已经使用了
with
子句,但仍然会出现分块编码错误,因此我认为这不是问题的根源
 with requests.request("POST", url_base, json=task, headers=headers) as report:
    print('report: ', report)