📝 Edit page
➕ Add page
Requests with retry
from urllib3.util.retry import Retry
import requests
from requests.adapters import HTTPAdapter
def requests_retry_session(
retries: int = 3,
backoff_factor: float = 0.3,
status_forcelist: tuple = (500, 502, 503, 504),
session: requests.Session | None = None,
) -> requests.Session:
"""
Return a requests.Session object with a retry strategy.
Args:
retries: Number of retries to attempt.
backoff_factor: A backoff factor to apply between attempts.
status_forcelist: A set of HTTP status codes that we should retry on.
session: An optional existing session object to mount the adapter on.
Returns:
requests.Session: A session object configured for retries.
"""
session = session or 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
# Example usage
try:
s = requests_retry_session()
response = s.get("http://httpbin.org/status/500")
response.raise_for_status()
print("Success!")
except requests.exceptions.RequestException as e:
print(f"Failed after retries: {e}")