使用Python的requests
库是否可以限制GET请求的下载速率?例如,使用以下命令:
r = requests.get('https://stackoverflow.com/')
有没有可能限制下载速度?我希望有类似于wget
命令的东西:
wget --limit-rate=20k https://stackoverflow.com/
我知道使用 urllib2 可以实现,但我特别想问的是 requests
库能否实现。
使用Python的requests
库是否可以限制GET请求的下载速率?例如,使用以下命令:
r = requests.get('https://stackoverflow.com/')
有没有可能限制下载速度?我希望有类似于wget
命令的东西:
wget --limit-rate=20k https://stackoverflow.com/
我知道使用 urllib2 可以实现,但我特别想问的是 requests
库能否实现。
限流有几种方法,其中之一是令牌桶算法,你可以在这里找到一份指南和另一份指南。
通常情况下,你会想对socket.send()
和socket.recv()
进行节流或限流。你可以尝试使用socket-throttle
,看看它是否符合你的需求。
x-ratelimit
速率限制响应标头不同,后者涉及请求次数而非下载/传输速率。没有内置支持,但是可以使用流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)
...
在高级用法中写道,它允许您一次检索较小的响应量。
在我的网络中,上面的示例(导致几GB大的文件)没有休眠时带宽为17.4 MB/s,而休眠1毫秒后为2.5 MB/s。
requests
库来实现这一点,因此这并没有真正回答问题......除非你建议他重新编写requests
的深入部分以实现他想要的功能。 - Dan H