42 lines
950 B
Python
42 lines
950 B
Python
|
|
"""
|
||
|
|
HTTP 工具模块
|
||
|
|
"""
|
||
|
|
import requests
|
||
|
|
from requests.adapters import HTTPAdapter
|
||
|
|
from urllib3.util.retry import Retry
|
||
|
|
|
||
|
|
|
||
|
|
def get_retry_session(
|
||
|
|
retries: int = 3,
|
||
|
|
backoff_factor: float = 0.5,
|
||
|
|
status_forcelist: tuple = (500, 502, 503, 504)
|
||
|
|
) -> requests.Session:
|
||
|
|
"""
|
||
|
|
获取带重试机制的 HTTP Session
|
||
|
|
|
||
|
|
Args:
|
||
|
|
retries: 重试次数
|
||
|
|
backoff_factor: 重试间隔因子
|
||
|
|
status_forcelist: 需要重试的 HTTP 状态码
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
配置好的 Session 实例
|
||
|
|
"""
|
||
|
|
session = requests.Session()
|
||
|
|
retry = Retry(
|
||
|
|
total=retries,
|
||
|
|
read=retries,
|
||
|
|
connect=retries,
|
||
|
|
backoff_factor=backoff_factor,
|
||
|
|
status_forcelist=status_forcelist,
|
||
|
|
)
|
||
|
|
adapter = HTTPAdapter(max_retries=retry)
|
||
|
|
session.mount('http://', adapter)
|
||
|
|
session.mount('https://', adapter)
|
||
|
|
return session
|
||
|
|
|
||
|
|
|
||
|
|
# 全局共享 Session
|
||
|
|
global_session = get_retry_session()
|
||
|
|
|