Requests报”requests.exceptions.ConnectionError: HTTPConnectionPool(host='{host}’, port={port}): Read timed out. (read timeout={timeout}) “的原因以及解决办法

  • Post category:Python

这个错误提示意味着请求的响应超时,即请求方在规定的时间内没有收到响应数据。这可能由于以下一些原因导致:

  1. 主机或端口错误,无法连接到服务器。
  2. 请求的服务器准备时间过长,而且由于请求超时而关闭了连接。
  3. 服务器在读取和处理请求时需要更长的时间。
  4. 网络连接不稳定,请求包损坏或丢失导致连接被中断。

以下是解决这个问题的一些常见步骤:

  1. 检查请求的主机名和端口是否正确。确保正确设置了正确的网络代理(需要HTTP代理时)。

  2. 调整请求的参数,例如在请求头中添加超时时间选项timeout。

“`
import requests

try:
requests.get(“http://example.com”, timeout=5)
except requests.exceptions.Timeout:
print(“Request timed out”)
“`

  1. 通过设置verify=False可以忽略SSL证书错误。

“`
import requests

requests.get(“http://example.com”, verify=False)
“`

  1. 捕获连接超时和连接错误异常,并重试请求,提高请求的稳定性。

“`
import requests
from requests.exceptions import ConnectionError, Timeout

def make_request():
try:
response = requests.get(“http://example.com”, timeout=5)
return response
except (ConnectionError, Timeout):
return None

retries = 3
for i in range(retries):
response = make_request()
if response is not None:
break
“`

总之,要解决这个错误需要检查主机名和端口号、请求参数、SSL证书错误和网络连接等情况。正确设置请求参数、捕捉异常和重试请求等方法有助于提高请求的稳定性和可靠性。