from requests import Session
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
from typing import Sequence
def retry_requests(
retries: int = 5, backoff_factor: float = 0.5, status_forcelist: Sequence[int] = (500, 502, 504)
) -> Session:
session = Session()
adapter = HTTPAdapter(
max_retries=Retry(
total=retries,
read=retries,
connect=retries,
backoff_factor=backoff_factor,
status_forcelist=status_forcelist,
)
)
session.mount("http://", adapter)
session.mount("https://", adapter)
return session
参数:
- retries 重试的次数,
- backoff_factor 重试的间隔
- status_forcelist: 服务器返回的状态码,如果包含在里面则发起重试
使用方式
retry_requests().get('https://baidu.com')
retry_requests().post('https://baidu.com')
retry_requests().head('https://baidu.com')
retry_requests().put('https://baidu.com')