【Python】requests获取网络响应的时候,遇到url超过最大重试次数的解决方法

我们在使用requests连接网址后,获取网络响应的时候,有时候可能会遇到这样的问题:
在这里插入图片描述
问题:

Maxretries exceeded with url: /tags-%E9%A1%B9%E7%9B%AE-5.html(Caused
by SSLError(SSLEOFError(8,‘EOFoccurred in violation of
protocol(ssl.c:1129)’)))

这是指,在使用 requests 库或其他 HTTP 客户端库时,尝试对一个 URL 进行请求时超出了最大重试次数,并且在重试过程中遇到了 SSL 协议错误。

错误的原理:

  1. requests 库允许用户,为发送的请求设置重试逻辑。如果请求连续失败达到设定的次数,就会抛出这个错误。

  2. SSLEOFError(8,‘EOF occurred in violation of protocol’) 是指, SSL/TLS 加密的 HTTPS 请求过程中发生了一个 EOF(文件结束)错误。在 SSL 握手过程中,连接意外地结束了,这违反了 SSL 协议。

解决办法:

这时候可以使用 requests 的 Session 对象,并设置 mount 方法来配置 HTTPAdapter,包括重试策略,例如:

import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

session = requests.Session()

# 设置重试策略
retries = Retry(total=5, backoff_factor=1, status_forcelist=[502, 503, 504])
session.mount('http://', HTTPAdapter(max_retries=retries))

# 设置默认headers
session.headers.update({'User-Agent': 'my-app/0.0.1'})

# 发送请求
response = session.get('https://example.com')

# 打印状态码和响应内容
print(response.status_code)#状态码

print(response.text) #响应内容

# 会话结束
session.close()

Session 对象是一种会话对象,它允许你跨请求保持某些参数和Cookie。

Session 对象发送请求时返回的是 requests 的 Response 对象,这个对象封装了服务器响应的所有信息,如状态码、响应头、内容等。

Session 对象可以保持会话状态,这对于模拟登录状态非常有用,因为你可以保持身份验证Cookie。

同时,在session里,我们还能在遇到特定状态码或异常时,自动请求重试,例如

“retries = Retry(total=5, backoff_factor=1, status_forcelist=[502, 503, 504]) ”

这一列就是在遇到错误状态码时重新连接。

具体代表的意思是:

total: 表示最大重试次数,包括初次请求。在这个例子中,total=5 意味着如果初次请求失败,将总共尝试5次。

backoff_factor: 表示重试之间的延迟因子。这个因子将用于计算重试前的等待时间。
backoff_factor=1 意味着重试前的等待时间将是从1秒开始指数增长(如果使用默认的退避策略)。

status_forcelist: 这是一个状态码列表,也就是接收到这些状态码时,会触发重试的请求。
在这个例子中,status_forcelist=[502, 503, 504] 表示当响应的状态码是502(Bad Gateway)、503(Service Unavailable)或504(Gateway Timeout)时,将触发重试。
当然还有一些429,404,402等可能会出现的错误状态码也可以加进去~

一些其他的解决方法:

1.增加超时时间:如果网络不稳定,尝试增加请求的超时时间。

2.检查服务器:确认服务器端是否正常工作,没有遇到错误或配置问题。

3.更新客户端 SSL/TLS 配置:确保客户端使用正确的证书和协议版本。

  1. 检查本地网络连接:确保本地网络连接稳定,没有被防火墙或代理阻止。

  2. 一些不靠谱的建议:第二天重启电脑再连网的时候就没事了(又多了摸鱼的理由!哈哈哈哈)

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值