欢迎访问宙启技术站
智能推送

使用Python中urllib3.util.Timeout()实现网络请求的超时控制

发布时间:2023-12-13 19:08:44

在Python中,可以使用urllib3库中的util.Timeout()类来实现网络请求的超时控制。Timeout类用于定义请求的超时限制,可以指定连接超时时间和读取超时时间。下面是一个使用Timeout类的示例:

import urllib3
from urllib3.util import Timeout

# 创建一个Timeout对象,连接超时时间为3秒,读取超时时间为5秒
timeout = Timeout(connect=3.0, read=5.0)

# 创建一个urllib3的PoolManager对象,用于发送请求
http = urllib3.PoolManager()

try:
    # 发送GET请求,并设置超时时间为timeout
    response = http.request('GET', 'https://www.example.com', timeout=timeout)

    # 如果请求成功,打印响应内容
    if response.status == 200:
        print(response.data.decode('utf-8'))
    else:
        print('Request failed with status code:', response.status)

except urllib3.exceptions.TimeoutError:
    print('Request timed out.')

except urllib3.exceptions.HTTPError:
    print('HTTPError occurred.')

except urllib3.exceptions.RequestError:
    print('RequestError occurred.')

在上面的例子中,首先创建了一个Timeout对象,连接超时时间设置为3秒,读取超时时间设置为5秒。然后,创建了一个urllib3.PoolManager对象用于发送请求。

在发起请求时,可以通过timeout参数将之前创建的Timeout对象传递给http.request()方法,以便指定请求的超时限制。

try块中处理请求的响应,并根据响应的状态码进行相应的处理。如果请求成功,可以通过response.data获取响应的内容。

如果请求超时,会抛出urllib3.exceptions.TimeoutError异常,可以在except块中进行相应的处理。

另外,还可能抛出urllib3.exceptions.HTTPErrorurllib3.exceptions.RequestError异常,可以根据需要进行相应的处理。

使用urllib3.util.Timeout()类可以实现网络请求的超时控制,避免请求时间过长导致程序阻塞的问题。可以根据具体需求设置适当的超时时间,以提高程序的健壮性和性能。