1. import requests
  2. import time
  3. from typing import Union
  4. def retry_request(url: str, max_retries: int = 3, delay: int = 1):
  5. """
  6. Retries an HTTP request with exponential backoff.
  7. Args:
  8. url: The URL to request.
  9. max_retries: The maximum number of retries.
  10. delay: The initial delay in seconds between retries.
  11. Returns:
  12. The response object if successful, None otherwise.
  13. """
  14. for attempt in range(max_retries):
  15. try:
  16. response = requests.get(url) # Make the request
  17. response.raise_for_status() # Raise HTTPError for bad responses (4xx or 5xx)
  18. return response # Return the response if successful
  19. except requests.exceptions.RequestException as e:
  20. if attempt == max_retries - 1:
  21. print(f"Request failed after {max_retries} attempts: {e}")
  22. return None # Return None if all retries fail
  23. else:
  24. print(f"Request failed, retry {attempt + 1}/{max_retries}. Error: {e}")
  25. time.sleep(delay * (2 ** attempt)) # Exponential backoff
  26. return None # Should not reach here, but included for completeness
  27. if __name__ == '__main__':
  28. # Example usage
  29. url = "https://httpstat.us/500" # Example URL that returns a 500 error
  30. response = retry_request(url)
  31. if response:
  32. print("Request successful!")
  33. print(response.status_code)
  34. #print(response.text) # Uncomment to print the response content
  35. else:
  36. print("Request failed after multiple retries.")

Add your comment