Skip to content

超时

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/')