(Python) ConnectionError: Max retries exceeded with url

avatar

Borislav Hadzhiev

Sat Apr 30 20222 min read

banner

Photo by Anatol Lem

(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.

main.py
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 on
  • backoff_factor - a backoff factor factor to apply between attempts after the second try.
The example above retries the request 3 times with backoff factor of 0.5 seconds after the second try.

You can also use a try/except block if you don't want to retry when an error occurs.

main.py
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.

main.py
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()
Use the search field on my Home Page to filter through my more than 1,000 articles.