gpt4 book ai didi

Python 请求 - ChunkedEncodingError(e) - requests.iter_lines

转载 作者:太空狗 更新时间:2023-10-29 23:57:17 26 4
gpt4 key购买 nike

我正在使用 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)

我在回车符上定界,然后将其作为端点添加回去,我将日志推送到实际上期望在每个事件结束时也有回车符。这似乎适用于大约 100k 的日志文件。当我尝试进行更大的调用时,我会抛出以下内容:

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_lines 吗?然后确保 block 中没有NoneType?这样我就不会尝试在 NoneType 上执行 iter_lines 而它会爆炸?

最佳答案

ChunkedEncodingError 是由:httplib.IncompletedRead

引起的

enter image description here

import httplib

def patch_http_response_read(func):
def inner(*args):
try:
return func(*args)
except httplib.IncompleteRead, e:
return e.partial
return inner

httplib.HTTPResponse.read = patch_http_response_read(httplib.HTTPResponse.read)

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

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

关于Python 请求 - ChunkedEncodingError(e) - requests.iter_lines,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44509423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com