python请求超时。获取整个响应

新手上路,请多包涵

我正在收集有关网站列表的统计信息,并且为了简单起见,我正在使用它的请求。这是我的代码:

 data=[]
websites=['http://google.com', 'http://bbc.co.uk']
for w in websites:
    r= requests.get(w, verify=False)
    data.append( (r.url, len(r.content), r.elapsed.total_seconds(), str([(l.status_code, l.url) for l in r.history]), str(r.headers.items()), str(r.cookies.items())) )

现在,我希望 requests.get 在 10 秒后超时,这样循环就不会卡住。

这个问题 以前 也很有趣,但没有一个答案是干净的。我会为此付出一些赏金以获得一个不错的答案。

我听说也许不使用 requests 是个好主意,但是我应该如何获得 requests 提供的好东西。 (元组中的那些)

原文由 Kiarash 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 457
2 个回答

使用 eventlet 怎么样?如果您想在 10 秒后使请求超时,即使正在接收数据,此代码段也适合您:

 import requests
import eventlet
eventlet.monkey_patch()

with eventlet.Timeout(10):
    requests.get("http://ipv4.download.thinkbroadband.com/1GB.zip", verify=False)

原文由 Alvaro 发布,翻译遵循 CC BY-SA 3.0 许可协议

设置 超时参数

 r = requests.get(w, verify=False, timeout=10) # 10 seconds

版本 2.25.1 中的更改

如果读取之间的连接或延迟超过十秒,上面的代码将导致对 requests.get() 的调用超时。请参阅: https ://requests.readthedocs.io/en/stable/user/advanced/#timeouts

原文由 Lukasa 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题