python requests 重试_我可以为requests.request设置最大重试次数吗?

这不仅会改变最大重试次数,而且还会启用回退策略,使所有http://地址在重试前睡眠一段时间(总共5次):import requests

from urllib3.util.retry import Retry

from requests.adapters import HTTPAdapter

s = requests.Session()

retries = Retry(total=5,

backoff_factor=0.1,

status_forcelist=[ 500, 502, 503, 504 ])

s.mount('http://', HTTPAdapter(max_retries=retries))

s.get('http://httpstat.us/500')

根据documentation for ^{}:如果回退因子为0.1,则sleep()将在重试之间睡眠[0.1s、0.2s、0.4s,…]。如果返回的状态代码是500,502,503或504,则还将强制重试。

其他各种Retry选项允许更细粒度的控制:total–允许的重试总数。

connect–要重试的连接相关错误数。

read–读取错误时重试多少次。

重定向-要执行的重定向数。

method_whitelist–一组大写的HTTP方法动词,我们应该重试。

status_forcelist–一组我们应该强制重试的HTTP状态代码。

退避系数-在两次尝试之间应用的退避系数。

raise_on_redirect–如果重定向数已用尽,是引发一个MaxRetryError,还是返回一个响应代码在3xx范围内的响应。

raise_on_status–类似于raise_on_redirect的含义:如果状态落在status_forcelist范围内,并且重试次数已用尽,则是否应引发异常或返回响应。

NB:raise-on-u status是一个相对较新的版本,尚未发布urllib3或请求。raise-on-u status关键字参数似乎已使其在python 3.6版本中最多进入标准库。

要在特定的HTTP状态代码上重试请求,请使用status-forcelist。例如,状态强制列表=[503]将在状态代码503上重试(服务不可用)。

默认情况下,重试仅在以下情况下触发:无法从池中获取连接。

TimeoutError

HTTPException提升(在Python 3 elsehttplib中从http.client开始)。

这似乎是低级HTTP异常,如URL或protocol not

形状正确。

SocketError

ProtocolError

注意,这些都是阻止接收常规HTTP响应的异常。如果生成任何常规响应,则不执行重试。如果不使用状态强制列表,即使是状态为500的响应也不会重试。

为了使其以更直观的方式操作远程API或web服务器,我将使用上面的代码片段,它强制在状态500,502,503和504上重试,所有这些状态在web上并不少见,并且(可能)在足够长的退避期内可以恢复。

编辑的:直接从urllib3导入{}类。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值