requests使用retry策略
Posted thomaszdxsn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了requests使用retry策略相关的知识,希望对你有一定的参考价值。
网络请求往往会有很多不受控制的意外情况发生,有时候我们要让它let it crash
,有时候我们想多尝试几次。
以前,使用retry
策略,我一般会使用tenacity
1这个第三方库。这个库的API相当得漂亮,很多大V也推荐过。
最近,我看了一篇文章2,是requests
的作者之一写的。他告诉我们,requests
原生就支持retry。
在urllib3中使用retry
urllib3
使用PoolManager
,可以对特定的response设置retry。
比如,下面我们对500错误进行了retry:
from urllib3.util import Retry
from urllib3 import PoolManager
retries = Retry(total=5, status_forcelist=[500])
manager = PoolManager(retries=retries)
response = manager.request('GET', 'https://httpbin.org/status/500')
在requests中使用retry
from requests.packages.urllib3.util import Retry
from requests.adapters import HTTPAdapter
from requests import Session, exceptions
s = Session()
s.mount('https://', HTTPAdapter(
max_retries=Retry(total=5, status_forcelist=[500])
)
)
s.get('https://httpbin.org/status/500')
可以看到requests
的API一贯的简洁。另外需要知道的是这里利用了requests
的"传输适配器(Transport Adapter)",如果你对这个不了解,请看这篇博客3.
以上是关于requests使用retry策略的主要内容,如果未能解决你的问题,请参考以下文章
使用requests爬取报错“Max retries exceeded with url“的解决方法
python http requests失败重试方法, 退避算法(Retrying HTTP Requests with Backoff)
python http requests失败重试方法, 退避算法(Retrying HTTP Requests with Backoff)