Skip to content

Commit a1995a1

Browse files
Create requests-with-retry.md
1 parent e6f0387 commit a1995a1

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

recipes/python/requests-with-retry.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# Requests with retry
2+
3+
```python
4+
from urllib3.util.retry import Retry
5+
6+
import requests
7+
from requests.adapters import HTTPAdapter
8+
9+
10+
def requests_retry_session(
11+
retries=3,
12+
backoff_factor=0.3,
13+
status_forcelist=(500, 502, 503, 504),
14+
session=None,
15+
):
16+
"""
17+
Return a requests.Session object with a retry strategy.
18+
19+
Args:
20+
retries (int): Number of retries to attempt.
21+
backoff_factor (float): A backoff factor to apply between attempts.
22+
status_forcelist (tuple): A set of HTTP status codes that we should retry on.
23+
session (requests.Session): An existing session object to mount the adapter on.
24+
25+
Returns:
26+
requests.Session: A session object configured for retries.
27+
"""
28+
session = session or requests.Session()
29+
30+
retry = Retry(
31+
total=retries,
32+
read=retries,
33+
connect=retries,
34+
backoff_factor=backoff_factor,
35+
status_forcelist=status_forcelist,
36+
)
37+
adapter = HTTPAdapter(max_retries=retry)
38+
session.mount('http://', adapter)
39+
session.mount('https://', adapter)
40+
41+
return session
42+
43+
44+
# Example usage
45+
try:
46+
s = requests_retry_session()
47+
response = s.get('http://httpbin.org/status/500')
48+
response.raise_for_status()
49+
print("Success!")
50+
except requests.exceptions.RequestException as e:
51+
print(f"Failed after retries: {e}")
52+
```

0 commit comments

Comments
 (0)