2025-12-29 03:06:49 +08:00
|
|
|
"""
|
2026-04-06 16:47:36 +07:00
|
|
|
HTTP tool module
|
2025-12-29 03:06:49 +08:00
|
|
|
"""
|
|
|
|
|
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:
|
|
|
|
|
"""
|
2026-04-06 16:47:36 +07:00
|
|
|
Get HTTP Session with retry mechanism
|
2025-12-29 03:06:49 +08:00
|
|
|
|
|
|
|
|
Args:
|
2026-04-06 16:47:36 +07:00
|
|
|
retries: number of retries
|
|
|
|
|
backoff_factor: retry interval factor
|
|
|
|
|
status_forcelist: HTTP status codes that need to be retried
|
2025-12-29 03:06:49 +08:00
|
|
|
|
|
|
|
|
Returns:
|
2026-04-06 16:47:36 +07:00
|
|
|
Configured Session instance
|
2025-12-29 03:06:49 +08:00
|
|
|
"""
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
2026-04-06 16:47:36 +07:00
|
|
|
# Global shared session
|
2025-12-29 03:06:49 +08:00
|
|
|
global_session = get_retry_session()
|
|
|
|
|
|