1. import requests
  2. from urllib.parse import urlparse
  3. def fetch_data_with_cookie_fallback(url, cookie_manager=None, max_retries=3):
  4. """
  5. Fetches data from a URL, attempting to use cookies if available.
  6. Falls back to a plain request if cookies are not present or if the request fails.
  7. Args:
  8. url (str): The URL to fetch data from.
  9. cookie_manager (object, optional): An object that manages cookies. Defaults to None.
  10. max_retries (int, optional): Maximum number of retry attempts. Defaults to 3.
  11. Returns:
  12. requests.Response or None: The response object if successful, None otherwise.
  13. """
  14. for attempt in range(max_retries):
  15. try:
  16. # Try to use cookies
  17. if cookie_manager:
  18. response = requests.get(url, cookies=cookie_manager.get_cookies())
  19. else:
  20. response = requests.get(url) # No cookies provided
  21. response.raise_for_status() # Raise HTTPError for bad responses (4xx or 5xx)
  22. return response
  23. except requests.exceptions.RequestException as e:
  24. print(f"Attempt {attempt + 1} failed: {e}")
  25. if attempt < max_retries - 1:
  26. print("Retrying...")
  27. continue
  28. else:
  29. print("Failed after multiple retries.")
  30. return None
  31. except Exception as e:
  32. print(f"An unexpected error occurred: {e}")
  33. return None
  34. if __name__ == '__main__':
  35. #Example usage
  36. url = "https://httpbin.org/cookies/set?session_id=12345" #URL with cookies
  37. #url = "https://httpbin.org/get" #URL without cookies
  38. # Simulate a cookie manager
  39. class SimpleCookieManager:
  40. def __init__(self):
  41. self.cookies = {}
  42. def get_cookies(self):
  43. return self.cookies
  44. def set_cookie(self, name, value):
  45. self.cookies[name] = value
  46. cookie_manager = SimpleCookieManager()
  47. cookie_manager.set_cookie("session_id", "12345")
  48. response = fetch_data_with_cookie_fallback(url, cookie_manager)
  49. if response:
  50. print("Successfully fetched data:")
  51. print(response.text)
  52. else:
  53. print("Failed to fetch data.")

Add your comment