如何限制请求 python 库中 HTTP 请求的下载速率?

Posted

技术标签:

【中文标题】如何限制请求 python 库中 HTTP 请求的下载速率?【英文标题】:How to limit download rate of HTTP requests in requests python library? 【发布时间】:2013-07-15 12:01:26 【问题描述】:

是否可以使用requests Python 库限制 GET 请求的下载速率?例如,使用这样的命令:

r = requests.get('https://***.com/')

...可以限制下载速度吗?我希望有类似wget 命令的东西:

wget --limit-rate=20k https://***.com/

我知道是possible 和urllib2。我专门询问requests 库。

【问题讨论】:

【参考方案1】:

有几种限制速率的方法;其中之一是token bucket,您可以找到a recipe here 和another one here。

通常您希望对socket.send()socket.recv() 进行节流或速率限制。你可以试试socket-throttle,看看它是否能满足你的需要。


不要与x-ratelimit rate limiting response headers 混淆,后者与请求数量有关,而不是与下载/传输速率有关。

【讨论】:

自从 OP 询问有关使用 requests 库执行此操作时,这并不能真正回答问题......除了您建议他重新编写 requests 的深层部分来做他想要什么。 @DanH,非常欢迎您提供更好的答案,在撰写本文时答案是“不,除非您弄乱内部结构”,这对 OP 没有帮助。跨度> 【参考方案2】:

没有内置支持,但是可以使用stream api。

>>> import requests
>>> import time
>>> req = requests.request('GET', 'https://httpbin.org/get', stream=True)
>>> for data in req.iter_content(chunk_size=1024):
...     time.sleep(0.001)
...

在advanced usage 中写道,它允许您一次检索更少量的响应。

在我的网络中,上面的示例(导致几个 GB 的大文件)没有睡眠的带宽为 17.4 MB/s,睡眠为 1 ms 的带宽为 2.5 MB/s。

【讨论】:

以上是关于如何限制请求 python 库中 HTTP 请求的下载速率?的主要内容,如果未能解决你的问题,请参考以下文章

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

http请求头大数据post如何判断完整

如何使用 python 请求执行限时响应下载?

如何使用 python 请求执行限时响应下载?

requests库中常用的方法(待补充)

Python post 请求在请求库中引发 400 'Bad Request' 错误,但适用于 cURL