Python请求,如何限制接收大小,传输速率和或总时间?

Python请求,如何限制接收大小,传输速率和或总时间?,第1张

Python请求,如何限制接收大小,传输速率和/或总时间?

您可以尝试设置

stream=True
,然后在读取数据块时超出时间或大小限制时中止请求。

requests
版本2.3.0开始,超时也适用于流请求,因此您需要做的就是允许初始连接和每个迭代步骤都超时:

r = requests.get(..., stream=True, timeout=initial_timeout)r.raise_for_status()if int(r.headers.get('Content-Length')) > your_maximum:    raise ValueError('response too large')size = 0start = time.time()for chunk in r.iter_content(1024):    if time.time() - start > receive_timeout:        raise ValueError('timeout reached')    size += len(chunk)    if size > your_maximum:        raise ValueError('response too large')    # do something with chunk

根据需要调整超时时间。

对于

requests
版本低于2.3.0(包括此更改)的版本,您无法超时
r.iter_content()
。在块中间停止响应的服务器仍会占用连接。您必须将以上代码包装在其他超时功能中,以尽早切断长时间运行的响应。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5507837.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存