1. import requests
  2. import logging
  3. # Configure logging
  4. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
  5. def safe_http_request(url, method='GET', data=None, headers=None, timeout=5):
  6. """
  7. Performs an HTTP request with basic sanity checks.
  8. Args:
  9. url (str): The URL to request.
  10. method (str): The HTTP method (GET, POST, etc.). Defaults to GET.
  11. data (dict): The data to send in the request body (for POST, PUT, etc.). Defaults to None.
  12. headers (dict): The headers to include in the request. Defaults to None.
  13. timeout (int): Timeout in seconds. Defaults to 5.
  14. Returns:
  15. requests.Response: The response object if the request is successful.
  16. None: If the request fails due to invalid URL, connection error, or other issues.
  17. """
  18. try:
  19. # Sanity check: Valid URL format
  20. if not url.startswith(('http://', 'https://')):
  21. raise ValueError("Invalid URL: URL must start with http:// or https://")
  22. # Make the request
  23. response = requests.request(method, url, data=data, headers=headers, timeout=timeout)
  24. # Sanity check: Successful status code
  25. response.raise_for_status() # Raise HTTPError for bad responses (4xx or 5xx)
  26. return response
  27. except requests.exceptions.RequestException as e:
  28. logging.error(f"Request failed: {e}")
  29. return None
  30. except ValueError as e:
  31. logging.error(f"Invalid URL: {e}")
  32. return None
  33. except Exception as e:
  34. logging.error(f"An unexpected error occurred: {e}")
  35. return None
  36. if __name__ == '__main__':
  37. # Example Usage
  38. url = "https://www.example.com"
  39. response = safe_http_request(url)
  40. if response:
  41. print(f"Request to {url} successful. Status code: {response.status_code}")
  42. #print(response.text) # uncomment to print content
  43. else:
  44. print(f"Request to {url} failed.")
  45. #Example with invalid URL
  46. invalid_url = "example.com"
  47. response = safe_http_request(invalid_url)
  48. if response:
  49. print(f"Request to {invalid_url} successful. Status code: {response.status_code}")
  50. else:
  51. print(f"Request to {invalid_url} failed.")

Add your comment