1. import time
  2. import random
  3. import requests
  4. def retry_submission(url, data, max_retries=3, delay=1):
  5. """
  6. Retries a form submission with graceful failure handling.
  7. Args:
  8. url (str): The URL to submit the form to.
  9. data (dict): The data to submit in the form.
  10. max_retries (int): The maximum number of retries.
  11. delay (int): The delay between retries in seconds.
  12. Returns:
  13. requests.Response or None: The response object if successful, None otherwise.
  14. """
  15. for attempt in range(max_retries):
  16. try:
  17. response = requests.post(url, data=data) # Attempt the submission
  18. response.raise_for_status() # Raise HTTPError for bad responses (4xx or 5xx)
  19. return response # Return the response on success
  20. except requests.exceptions.RequestException as e:
  21. print(f"Attempt {attempt + 1} failed: {e}")
  22. if attempt < max_retries - 1:
  23. print(f"Retrying in {delay} seconds...")
  24. time.sleep(delay + random.uniform(0, delay/2)) # Add some jitter to delay
  25. else:
  26. print("Max retries reached. Submission failed.")
  27. return None # Return None if all retries fail
  28. if __name__ == '__main__':
  29. # Example Usage
  30. form_url = "https://httpbin.org/post" # Replace with your form URL
  31. form_data = {"key1": "value1", "key2": "value2"}
  32. response = retry_submission(form_url, form_data)
  33. if response:
  34. print("Submission successful!")
  35. print(response.json())
  36. else:
  37. print("Submission failed after multiple retries.")

Add your comment