(Python) ConnectionError: Max retries exceeded with url

avatar

Borislav Hadzhiev

Last updated: Apr 30, 2022

banner

Photo from Unsplash

(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 to apply between attempts after the second try.
The example above retries the request 3 times with a 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 the 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()

Conclusion #

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.

I wrote a book in which I share everything I know about how to become a better, more efficient programmer.
book cover
You can use the search field on my Home Page to filter through all of my articles.