import requests
import time
from typing import Union
def retry_request(url: str, max_retries: int = 3, delay: int = 1):
"""
Retries an HTTP request with exponential backoff.
Args:
url: The URL to request.
max_retries: The maximum number of retries.
delay: The initial delay in seconds between retries.
Returns:
The response object if successful, None otherwise.
"""
for attempt in range(max_retries):
try:
response = requests.get(url) # Make the request
response.raise_for_status() # Raise HTTPError for bad responses (4xx or 5xx)
return response # Return the response if successful
except requests.exceptions.RequestException as e:
if attempt == max_retries - 1:
print(f"Request failed after {max_retries} attempts: {e}")
return None # Return None if all retries fail
else:
print(f"Request failed, retry {attempt + 1}/{max_retries}. Error: {e}")
time.sleep(delay * (2 ** attempt)) # Exponential backoff
return None # Should not reach here, but included for completeness
if __name__ == '__main__':
# Example usage
url = "https://httpstat.us/500" # Example URL that returns a 500 error
response = retry_request(url)
if response:
print("Request successful!")
print(response.status_code)
#print(response.text) # Uncomment to print the response content
else:
print("Request failed after multiple retries.")
Add your comment