简要
Timeout
类用于控制在 urllib3
中执行 HTTP 请求时的超时行为。超时是指如果在指定的时间内没有完成操作,则认为操作失败。在 urllib3
中,你可以设置连接超时(连接到服务器的时间)和读取超时(等待服务器响应的时间)。
架构
Timeout
类是一个简单的数据类,它封装了超时相关的参数。它的主要属性包括:
total
: 总超时时间,包括连接和读取。connect
: 连接超时时间。read
: 读取超时时间。
如果只设置了total
,那么connect
和read
将默认使用total
的值。如果单独设置了connect
或read
,那么它们将分别使用自己的值。
内容
使用 Timeout
对象,你可以为请求设置超时时间。在 urllib3 中,Timeout 通常是通过 urllib3.PoolManager() 或 urllib3.Requests() 方法中的 timeout 参数来设置的。以下是一个简单的例子:
import urllib3
# 创建一个 PoolManager 实例
http = urllib3.PoolManager()
# 设置超时时间为 5 秒连接,10 秒读取
timeout = urllib3.Timeout(connect=5, read=10)
# 发送请求时使用超时设置
try:
resp = http.request('GET', 'http://example.com', timeout=timeout)
except urllib3.exceptions.TimeoutError as e:
print("Request timed out:", e)
代码案例
以下是一个使用 urllib3
的 Timeout
类设置请求超时的示例:
import urllib3
# 创建一个 PoolManager 实例
http = urllib3.PoolManager()
# 设置超时时间为 3 秒连接,5 秒读取
timeout = urllib3.Timeout(connect=3, read=5)
# 发送 GET 请求
try:
resp = http.request('GET', 'http://httpbin.org/get', timeout=timeout)
print("Request completed:", resp.data.decode('utf-8'))
except urllib3.exceptions.TimeoutError as e:
print("Request timed out:", e)
在这个例子中,我们设置了连接超时为 3 秒,读取超时为 5 秒。如果服务器在 3 秒内没有建立连接,或者在建立连接后 5 秒内没有返回响应数据,urllib3
将会抛出 TimeoutError
异常。
希望这个解释能帮助你更好地理解 urllib3
中的 Timeout
类。如果你有更多问题或需要进一步的澄清,请随时提问。