[python] 少量代码实现 requests http 请求重试

129 阅读1分钟
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')