是否可以使用requests
Python库限制GET请求的下载速率?例如,使用如下命令:
r = requests.get('https://stackoverflow.com/')
...是否可以限制下载速度?我希望有类似于wget
命令的东西:
wget --limit-rate=20k https://stackoverflow.com/
我知道possible与urllib2
。我是专门询问requests
库。
答案 0 :(得分:6)
有几种限速方法;其中一个是token bucket,您可以找到a recipe here和another one here。
通常,您希望对socket.send()
和socket.recv()
进行限制或限速。您可以使用socket-throttle
进行游戏,看看它是否符合您的要求。
这不应与x-ratelimit
rate limiting response headers混淆,{{3}}与多个请求相关,而不是与下载/传输速率相关。
答案 1 :(得分:0)
没有内置支持,但可以使用流 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 MBps,睡眠 1 毫秒为 2.5 MB/s。