Google App Engine /请求频繁出现ChunkedEncodingError

Cyr*_* N. 2 python google-app-engine python-requests

我经常ChunkedEncodingError使用Requests(Python)和Google App Engine 请求服务器.

使用httplib查看了IncompleteRead的答案,但问题是我不相信我的问题与查询服务器有关:我经常使用我正在使用的各种端点出现此错误,包括Intercom和FullContact.

如果问题总是来自同一台服务器(例如,FullContact),我会怀疑该问题与一个服务的服务器有关,但事实并非如此.我也遇到过与其他非相关请求有关的问题.

所以我怀疑问题是我的代码还是谷歌.但从我的代码"观点"来看,我不知道会出现什么问题.这是一个片段:

result = requests.post(
    "https://api.intercom.io/companies",
    json={'some': 'data', 'that': 'are', 'sent': 'ok'},
    headers={'Accept': 'application/json'},
    auth=("app_id", "app_key",)
)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,请求非常标准,没什么特别的.它也失败了一些简单的事情:

r = requests.get(url, params=params, timeout=3)
Run Code Online (Sandbox Code Playgroud)

有没有人在使用Google App Engine时遇到这些问题?我能做些什么来避免这种情况吗?

Cyr*_* N. 6

有一个补丁(似乎)可以在GAE上运行.该问题位于iter_content请求函数中,该函数使用后续的urllib3库.

问题是Google为了自己的实现而覆盖了这个库,但是有一些更改会在该Requests级别产生ChunkedEncodingError .

我试过这个补丁,到目前为止,这么好.具体来说,您必须在requests/models.py文件中替换以下行:

for chunk in self.raw.stream(chunk_size, decode_content=True):
    yield chunk
Run Code Online (Sandbox Code Playgroud)

通过:

if isinstance(self.raw._original_response._method, int):
    while True:
        chunk = self.raw.read(chunk_size, decode_content=True)
        if not chunk:
            break
        yield chunk
else:
    for chunk in self.raw.stream(chunk_size, decode_content=True):
        yield chunk
Run Code Online (Sandbox Code Playgroud)

问题就会停止.

我在Requests存储库上提交了一个问题来讨论它,我们将看到它将如何发展.