导航

python requests库的超时设置

Posted on 2023-06-20 16:47  蝈蝈俊  阅读(623)  评论(0编辑  收藏  举报

在 requests 库中, timeout 参数其实是一个比较复杂的概念。如果你直接把一个数字作为 timeout 参数的值,那么这个数字代表的是连接(connection)和读取(read)两个阶段的总时间,而不是各自的时间。换句话说,如果你设置 timeout=5,那么连接和读取阶段的总时间就不能超过 5 秒。


import requests

url = 'http://example.com'
data = {'key': 'value'}

try:
    r = requests.post(url, data=data, timeout=5.0)
except requests.exceptions.Timeout:
    print("请求超时")
# 处理其他可能的异常
except requests.exceptions.RequestException as err:
    print("请求出错:", err)


然而,有时候你可能想要分别为连接和读取阶段设置不同的超时时间。在这种情况下,你可以把一个二元元组 (connect_timeout, read_timeout) 作为 timeout 参数的值。例如,你可以这样设置:

r = requests.post(url, data=data, timeout=(1.0, 4.0))

在这个例子中,连接阶段的超时时间是 1 秒,读取阶段的超时时间是 4 秒。

注意,这个设置方法只在 requests 库的 2.4.0 及以后的版本中可用。在早期的版本中, timeout 参数只接受一个数字,用来表示连接和读取阶段的总超时时间。