requests中的超时(timeout)设定和捕获异常
为防止服务器不能及时响应,大部分发至外部服务器的请求都应该带着timeout
参数。在默认情况下,除非显式指定了timeout
值,requests是不会自动进行超时处理的。如果没有timeout
,你的代码可能会挂起若干分钟甚至更长时间。
一旦你的客户端连接到了服务器并且发送了 HTTP 请求,读取超时指的就是客户端等待服务器发送请求的时间。(特定地,它指的是客户端要等待服务器发送字节之间的时间。在 99.9% 的情况下这指的是服务器发送第一个字节之前的时间)。
如果你制订了一个单一的值作为timeout
,如下所示:
r = requests.get('https://github.com', timeout=5)
这一timeout
值将会用作 connect 和 read 二者的 timeout。如果要分别制定,就传入一个元组:
r = requests.get('https://github.com', timeout=(3.05, 27))
如果远端服务器很慢,你可以让 Request 永远等待,传入一个None
作为timeout
值,然后就冲咖啡去吧。
r = requests.get('https://github.com', timeout=None)
超时异常处理
若请求超时,则抛出一个ConnectTimeout
异常。
try:
response = requests.get("http://google.com",timeout=0.01)
except requests.exceptions.ConnectTimeout:
print("request timeout")