在使用ChunkedEncodingError
(Python)和Google App Engine请求服务器时,我经常有Requests
。
我查看了IncompleteRead using httplib的答案,但问题是我不相信我的问题与查询服务器有关:我经常会在我使用的各个端点上收到此错误,包括Intercom和FullContact。
如果问题总是来自同一台服务器(例如,FullContact),我会怀疑这个问题与一个服务的服务器有关,但事实并非如此。我还遇到了其他非相关请求的问题。
因此,我怀疑问题不在于我的代码还是Google。但是根据我的代码"观点",我不知道会出现什么问题。这是一个片段:
result = requests.post(
"https://api.intercom.io/companies",
json={'some': 'data', 'that': 'are', 'sent': 'ok'},
headers={'Accept': 'application/json'},
auth=("app_id", "app_key",)
)
正如您所看到的,请求非常标准,没什么特别的。它也失败了一些简单的事情:
r = requests.get(url, params=params, timeout=3)
有没有人在使用Google App Engine时遇到这些问题?我能做些什么来避免这种情况吗?
答案 0 :(得分:6)
有一个补丁(似乎)可以在GAE上运行。
该问题位于请求的iter_content
函数中,该函数使用后续的urllib3库。
问题在于Google会为自己的实现覆盖此库,但会有一些更改会导致Requests
级别的ChunkedEncodingError。
我试过了this patch,到目前为止,这么好。具体来说,您必须在requests / models.py文件中替换以下行:
for chunk in self.raw.stream(chunk_size, decode_content=True):
yield chunk
by:
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
问题将会停止。
我submitted an issue在Requests存储库中讨论它,我们将看到它将如何发展。