一、`requests`库及其超时设置
`requests`是 Python 中非常常用的 HTTP 请求库,它提供了简单易用的接口来发送 HTTP 请求。在 `requests` 中,可以通过设置 `timeout` 参数来处理请求超时。`timeout` 参数指定了等待服务器响应的超时时间,以秒为单位。
示例代码如下:
```python
import requests
try:
response = requests.get('https://example.com', timeout=5) # 设置超时时间为 5 秒
if response.status_code == 200:
print(response.text)
else:
print(f"请求失败,状态码:{response.status_code}")
except requests.Timeout:
print("请求超时")
```
在上述代码中,`requests.get` 方法发送了一个 GET 请求,并设置了超时时间为 5 秒。如果在 5 秒内服务器没有响应,就会抛出 `requests.Timeout` 异常,程序会捕获该异常并打印出 "请求超时"。
二、`httplib` 模块(Python 2 中)
在 Python 2 中,`httplib` 模块是用于处理 HTTP 请求的内置模块。它也提供了超时设置的功能。
示例代码如下:
```python
import httplib
conn = httplib.HTTPConnection('example.com', timeout=5) # 设置超时时间为 5 秒
try:
conn.request("GET", "/")
response = conn.getresponse()
if response.status == 200:
print(response.read())
else:
print(f"请求失败,状态码:{response.status}")
finally:
conn.close()
```
这里创建了一个 `HTTPConnection` 对象,并设置了超时时间为 5 秒。然后发送了一个 GET 请求,并获取响应。如果在超时时间内没有收到响应,或者响应状态码不是 200,就会进行相应的处理。
三、`asyncio` 和 `aiohttp` 库(异步处理请求超时)
对于异步编程,`asyncio` 是 Python 的标准库,而 `aiohttp` 是一个基于 `asyncio` 的异步 HTTP 客户端库。
示例代码如下:
```python
import asyncio
import aiohttp
async def fetch(session, url):
try:
async with session.get(url, timeout=5) as response:
if response.status == 200:
return await response.text()
else:
return f"请求失败,状态码:{response.status}"
except asyncio.TimeoutError:
return "请求超时"
async def main():
async with aiohttp.ClientSession() as session:
result = await fetch(session, 'https://example.com')
print(result)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```
在上述代码中,定义了一个异步函数 `fetch`,用于发送 HTTP 请求并处理响应。在 `main` 函数中,使用 `aiohttp.ClientSession` 创建一个异步会话,并调用 `fetch` 函数发送请求。通过 `async with` 语句来管理会话的生命周期。
四、`urllib3` 库及其超时设置
`urllib3` 是另一个用于处理 HTTP 请求的库,它提供了更高级的功能和更好的性能。
示例代码如下:
```python
import urllib3
http = urllib3.PoolManager(timeout=5) # 设置超时时间为 5 秒
try:
response = http.request('GET', 'https://example.com')
if response.status == 200:
print(response.data)
else:
print(f"请求失败,状态码:{response.status}")
except urllib3.exceptions.TimeoutError:
print("请求超时")
```
这里创建了一个 `PoolManager` 对象,并设置了超时时间为 5 秒。然后使用 `request` 方法发送 GET 请求,并处理响应。如果超时,就会抛出 `TimeoutError` 异常。
在 Python 中处理请求超时有多种方法和库可供选择。根据具体的需求和场景,选择合适的方法来处理请求超时可以提高程序的稳定性和可靠性。无论是使用 `requests`、`httplib`、`asyncio` 和 `aiohttp` 还是 `urllib3`,都可以轻松地设置请求超时时间,以避免长时间等待服务器响应而导致程序阻塞或出现错误。