Modules

Introduction To Python
  1. Advantages Of Learning Python As The First Programming Language
  2. Easy Python Setup Guide For Beginners
Basic Syntax And Variables
  1. Python Syntax Fundamentals
  2. Python Variables And Data Types
  3. Python Basic Operations
Control Flow
  1. Python Conditional Statements
  2. Python Loops
Functions And Modules
  1. Defining And Calling Python Functions
  2. Introduction To Python Modules And Importing
  3. Understanding Python Built In Functions Part 1
  4. Understanding Python Built In Functions Part 2
  5. Understanding Python Built In Functions Part 3
  6. Understanding Python Built In Functions Part 4
  7. Understanding Python Lambda Functions
Python Lists And Touples
  1. Manipulate Python Lists And Touples
  2. 5 Ways To Remove Items From A Python List By Index
  3. 5 Different Approaches To Check For Duplicate Values In Python Lists
  4. 5 Different Approaches To Check For A Specific Value In Python Lists
  5. 5 Various Approaches To Modify Elements In Python Lists
  6. Understanding Shallow Copy And Deep Copy In Python Lists
  7. 6 Various Approaches To Duplicating Lists In Python
  8. Exploring 8 Various Iteration Techniques In Python Lists
  9. Exploring Python List Concatenation Methods
  10. All You Must Know About Python Slicing
  11. Exploring Various Methods For Comparing Python Lists
  12. Converting Various Data Types To Python Lists
  13. Removing Duplicate Values From Python Lists
  14. Extend A Python List To A Desired Length
  15. Shorten A Python List To A Specific Length
  16. Efficient Ways To Creating Sequences In Python
Python Dictionaries
  1. Manipulate Python Dictionaries
  2. Understanding Python Enumerate Dictionary
  3. Efficient Ways Removing Items From Python Dictionaries
  4. 5 Different Ways To Check For Duplicate Values In Python Dictionaries
  5. Check For A Specific Value In Python Dictionaries
  6. Get Values By Key In Python Nested Dictionary
  7. Modify Values By Key In Python Nested Dictionary
  8. 7 Different Ways To Duplicating A Dictionary In Python
  9. 5 Various Iteration Techniques In Python Dict
  10. 4 Different Methods For Dictionary Concatenation In Python
  11. 4 Different Ways Of Comparing Python Dicts
  12. Converting Various Data Types To Python Dictionaries
  13. Efficient Ways To Remove Duplicate Values From Python Dictionaries
  14. Extend A Python Dictionary To A Desired Length
  15. Shorten Python Dictionaries To A Specific Length
  16. Efficient Approaches To Remove An Item By Value In Python Dictionaries
Python Sets
  1. Manipulate Python Sets
File Handling
  1. Reading From And Writing To Files In Python
  2. Python File Modes And Handling Exceptions
Object Oriented Programming
  1. Python Classes And Objects
  2. Python Inheritance Encapsulation And Polymorphism
Python Advanced Data Structures
  1. Python Collection Module
  2. Advanced Python Data Manipulation Techniques
Error Handling And Debugging
  1. Python Exception Handling
  2. Python Debugging Techniques And Tools
Regular Expressions
  1. Python Regular Expressions In Text Processing
  2. Python Regular Expressions Pattern Matching
Concurrency And Parallelism
  1. Threading Vs Multiprocessing In Python
  2. How To Achieve Concurrency And Parallelism In Python
  3. Concurrent Programming With Asyncio
Working With Apis
  1. Making Http Requests In Python
  2. Parsing Json Xml Responses In Python
Build Apis With Python Requests
  1. Python Requests Crud Operations
  2. Python Requests Timeout
Build Apis With Python Urllib3
  1. Disabling Hostname Verification In Python Example
Build Apis With Python Aiohttp
  1. Asynchronous Crud Operations In Python
  2. Retry In Python Aiohttp Async Requests
Database Interaction
  1. Connecting To Databases In Python
  2. Python Crud Operations And Orm Libraries
Python For Web Development
  1. Introduction To Python Web Frameworks
  2. Building Web Applications Using Flask
  3. Building Web Applications Using Django
  4. Building Web Applications Using Fastapi
Data Analysis And Visualization
  1. Introduction To Numpy Pandas And Matplotlib
  2. Analyzing Datasets And Visualizations In Python
Machine Learning With Python
  1. Machine Learning Concepts And Python
  2. Introduction To Scikit Learn And Tensorflow Keras
Python Typing Module
  1. Type Error Not Subscriptable While Using Typing
All Course > Python > Build Apis With Python Requests Dec 04, 2023

Retry in Python requests

Retry in Python Requests relates to automatically resubmitting unsuccessful HTTP requests. There are several reasons why a request made over a network can fail, including network issues, server failures, and rate limitations. Retrying unsuccessful requests can help you increase the robustness and dependability of your code as well as prevent interruptions or downtime brought on by temporary faults.

Python requests is a trendy Python package that makes your life easy by giving you APIs to make HTTP requests quickly. Not only that but also it provides a way to implement retry a specified number of times whenever your requests fail. 

A built-in retry feature of the Python Requests module enables you to set up automated retries for unsuccessful requests. The maximum number of retries, the time delay between retries, and the HTTP status codes that should be retried can all be specified. With each unsuccessful attempt, the duration between retries in this feature’s exponential backoff mechanism rises exponentially.

What is the backoff factor in Python requests?

Assume you want to retry HTTP request a maximum of 5 times on failure with a backoff factor of 3s. Once the initial request is failed, the Python request will trigger retries after each following second. The first retry will start just after the initial request is get failed. 

  • First retry → After 3*0 → 0s, 
  • Second retry → After 3*2 → 6s 
  • Third retry → After 3*4 → 12s
  • Fourth retry → After 3*8 → 24s
  • Fifth retry → After 3*16 → 48S

If the request is still failed, requests will throw an error after 0s+6s+12s+24s+48s → 90s

What are connect retries in Python requests?

Connect retry specifies the number of retries on failure that could happen while marketing the connection to the server.

What are read retries in Python requests?

Read retry specifies the number of retries on failure that could happen while reading data from the server.

Python requests Retry examples

Here we are using a publicly available API endpoint. This API will return user details as JSON. Also, We are using an in-built Retry class in the Python requests library to trigger retry requests automatically. In Each example, we are feeding the number of total retries, the number of connecting retries, the number of read retries, and the backoff factor.

GET request retry

# retry on get
import json
import requests
from requests.adapters import HTTPAdapter, Retry

REQUEST_RETRY = 3
BACKOFF_FACTOR = 3

def get():
    requests.packages.urllib3.disable_warnings()
    try:
        url = "https://gorest.co.in/public/v2/users"
        headers = {
            "Content-Type": "application/json",
            "Accept": "application/json"
            }

        with requests.Session() as s:
            retries = Retry(
                total=REQUEST_RETRY,
                backoff_factor=BACKOFF_FACTOR,
                connect=REQUEST_RETRY,
                read=REQUEST_RETRY
            )
            s.mount('http://', HTTPAdapter(max_retries=retries))
            s.mount('https://', HTTPAdapter(max_retries=retries))
            res = s.get(url, headers=headers, verify=False)
            if res.status_code != 200:
                raise Exception(
                    "Request {} failed, status: {}".format(
                        url, res.status_code
                    )
                )
            json_res = res.json()
            print(json.dumps(json_res, indent=4))
    except Exception as e:
        raise Exception("Error while request: {}".format(e))

if __name__ == "__main__":
    get()

POST request Retry

# retry on post
import json
import requests
from requests.adapters import HTTPAdapter, Retry

REQUEST_RETRY = 3
BACKOFF_FACTOR = 3

def post():
    requests.packages.urllib3.disable_warnings()
    try:
        url = "https://gorest.co.in/public/v2/users"
        headers = {
            "Content-Type": "application/json",
            "Authorization": "Bearer <ACCESS-TOKEN>",
            "Accept": "application/json"
            }

        payload = {
            "name": "Tenali Ramakrishna",
            "gender": "male",
            "email": "[email protected]",
            "status": "active"
        }

        with requests.Session() as s:

            retries = Retry(
                total=REQUEST_RETRY,
                backoff_factor=BACKOFF_FACTOR,
                connect=REQUEST_RETRY,
                read=REQUEST_RETRY
            )
            s.mount('http://', HTTPAdapter(max_retries=retries))
            s.mount('https://', HTTPAdapter(max_retries=retries))

            res = s.post(url, headers=headers, json=payload, verify=False)

            if res.status_code != 200:
                raise Exception(
                    "Request {} failed, status: {}".format(
                        url, res.status_code
                    )
                )

            json_res = res.json()
            print(json.dumps(json_res, indent=4))

    except Exception as e:
        raise Exception("Error while request: {}".format(e))

if __name__ == "__main__":
    post()

PUT request Retry

# retry on put
import json
import requests
from requests.adapters import HTTPAdapter, Retry

REQUEST_RETRY = 3
BACKOFF_FACTOR = 3

def put():
    requests.packages.urllib3.disable_warnings()
    try:
        url = "https://gorest.co.in/public/v2/users/547"
        headers = {
            "Content-Type": "application/json",
            "Authorization": "Bearer <ACCESS-TOKEN>",
            "Accept": "application/json"
        }
        payload = {
            "name": "Tenali Ramakrishna",
            "gender": "male",
            "email": "[email protected]",
            "status": "active"
        }

        with requests.Session() as s:

            retries = Retry(
                total=REQUEST_RETRY,
                backoff_factor=BACKOFF_FACTOR,
                connect=REQUEST_RETRY,
                read=REQUEST_RETRY
            )
            s.mount('http://', HTTPAdapter(max_retries=retries))
            s.mount('https://', HTTPAdapter(max_retries=retries))

            res = s.put(url, headers=headers, json=payload, verify=False)

            if res.status_code != 200:
                raise Exception(
                    "Request {} failed, status: {}".format(
                        url, res.status_code
                    )
                )

            json_res = res.json()
            print(json.dumps(json_res, indent=4))

    except Exception as e:
        raise Exception("Error while request: {}".format(e))

if __name__ == "__main__":
    put()

DELETE request Retry

#retry on delete
import json
import requests
from requests.adapters import HTTPAdapter, Retry

REQUEST_RETRY = 3
BACKOFF_FACTOR = 3

def delete():
    requests.packages.urllib3.disable_warnings()
    try:
        url = "https://gorest.co.in/public/v2/users/547"
        headers = {
            "Content-Type": "application/json",
            "Authorization": "Bearer <ACCESS-TOKEN>",
            "Accept": "application/json"
        }

        with requests.Session() as s:

            retries = Retry(
                total=REQUEST_RETRY,
                backoff_factor=BACKOFF_FACTOR,
                connect=REQUEST_RETRY,
                read=REQUEST_RETRY
            )
            s.mount('http://', HTTPAdapter(max_retries=retries))
            s.mount('https://', HTTPAdapter(max_retries=retries))

            res = s.delete(url, headers=headers, verify=False)

            if res.status_code != 200:
                raise Exception(
                    "Request {} failed, status: {}".format(
                        url, res.status_code
                    )
                )

            json_res = res.json()
            print(json.dumps(json_res, indent=4))

    except Exception as e:
        raise Exception("Error while request: {}".format(e))

if __name__ == "__main__":
    delete()

Conclusion

Python requests library is a fast way to make an API request. Also, its retry feature is a great way to trigger API requests again and again automatically on failures.

Comments

There are no comments yet.

Write a comment

You can use the Markdown syntax to format your comment.

Tags: python requests retry