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时遇到这些问题?我能做些什么来避免这种情况吗?
有一个补丁(似乎)可以在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存储库上提交了一个问题来讨论它,我们将看到它将如何发展.
| 归档时间: |
|
| 查看次数: |
620 次 |
| 最近记录: |