(Python) ConnectionError: Max retries exceeded with url
To solve the requests "ConnectionError: Max retries exceeded with url", use a Retry
object and specify how many connection-related errors to retry on and set a backoff factor to apply between attempts.
import requests
from requests.adapters import HTTPAdapter, Retry
def make_request():
session = requests.Session()
retry = Retry(connect=3, backoff_factor=0.5)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)
url = 'https://reqres.in/api/users'
response = session.get(url)
parsed = response.json()
print(parsed)
make_request()
The Session
object allows us to persist certain parameters across requests.
We passed the following keyword arguments to the Retry object:
connect
- the number of connection-related errors to retry onbackoff_factor
- a backoff factor factor to apply between attempts after the second try.
You can also use a try/except
block if you don't want to retry when an error occurs.
import requests
def make_request():
try:
url = 'https://reqres.in/api/users'
response = requests.get(url)
parsed = response.json()
print(parsed)
except requests.exceptions.ConnectionError:
# 👇️ handle error here or use a `pass` statement
print('connection error occurred')
make_request()
The except
block will run if a connection error is raised in the try
block.
If you got the error because requests
was unable to verify the SSL certificate of the site, you can set the verify
keyword argument to False
to disable SSL certificate validation for the request.
Note that you should only disable SSL certificate validation during local development or testing as it could make your application vulnerable to man-in-the-middle attacks.
import requests
def make_request():
try:
url = 'https://reqres.in/api/users'
# 👇️ set verify to False
response = requests.get(url, verify=False)
parsed = response.json()
print(parsed)
except Exception as e:
print(e)
make_request()