超时
HTTPX 默认会谨慎地在所有地方强制执行超时设置。
默认行为是在网络无活动5秒后抛出 TimeoutException
异常。
设置和禁用超时
您可以为单个请求设置超时:
# 使用顶层API:
httpx.get('http://example.com/api/v1/example', timeout=10.0)
# 使用客户端实例:
with httpx.Client() as client:
client.get("http://example.com/api/v1/example", timeout=10.0)
或者为单个请求禁用超时:
# 使用顶层API:
httpx.get('http://example.com/api/v1/example', timeout=None)
# 使用客户端实例:
with httpx.Client() as client:
client.get("http://example.com/api/v1/example", timeout=None)
在客户端上设置默认超时
您可以在客户端实例上设置超时,这将使该 timeout
值成为该客户端所有请求的默认超时:
client = httpx.Client() # 所有请求默认使用5秒超时
client = httpx.Client(timeout=10.0) # 所有请求默认使用10秒超时
client = httpx.Client(timeout=None) # 默认禁用所有超时
精细调整配置
HTTPX 还允许您以更细粒度的方式指定超时行为。
可能会发生四种不同类型的超时。分别是 连接(connect)、
读取、写入和连接池超时设置
- 连接超时(connect)指定等待与目标主机建立套接字连接的最长时间。如果 HTTPX 在此时间内无法建立连接,将引发
ConnectTimeout
异常。 - 读取超时(read)指定等待接收数据块(例如响应体的一部分)的最长持续时间。如果 HTTPX 在此时间内无法接收数据,将引发
ReadTimeout
异常。 - 写入超时(write)指定等待发送数据块(例如请求体的一部分)的最长持续时间。如果 HTTPX 在此时间内无法发送数据,将引发
WriteTimeout
异常。 - 连接池超时(pool)指定从连接池获取连接的最长等待时间。如果 HTTPX 在此时间内无法获取连接,将引发
PoolTimeout
异常。与此相关的配置项是连接池允许的最大连接数,可通过limits
参数进行配置。
你可以为以上任意超时值配置行为...
# 创建一个连接超时60秒,其他操作超时10秒的客户端
timeout = httpx.Timeout(10.0, connect=60.0)
client = httpx.Client(timeout=timeout)
response = client.get('http://example.com/')