Base.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import requests
  2. from typing import Dict,Optional
  3. from Config.APIConfig import BASE_URLS, ENV, TIMEOUT
  4. from Utils.Log import Logger
  5. logger = Logger(log_name="API_Base.log")
  6. class RequestHandler:
  7. """封装请求方法"""
  8. def __init__(self):
  9. self.session = requests.Session()
  10. self.base_url = BASE_URLS.get(ENV, '')
  11. def _request(self, method: str, url: str, **kwargs) -> requests.Response:
  12. """基础请求方法"""
  13. # 拼接完整URL
  14. if not url.startswith(('http://', 'https://')):
  15. url = f"{self.base_url}{url}"
  16. # 设置超时
  17. kwargs.setdefault('timeout', TIMEOUT)
  18. # 记录请求日志
  19. logger.info(f"Request: {method.upper()} {url}")
  20. if kwargs.get('params'):
  21. logger.info(f"Request params: {kwargs['params']}")
  22. if kwargs.get('json'):
  23. logger.info(f"Request json: {kwargs['json']}")
  24. if kwargs.get('data'):
  25. logger.info(f"Request data: {kwargs['data']}")
  26. try:
  27. response = self.session.request(method, url, **kwargs)
  28. # 记录响应日志
  29. logger.info(f"Response status: {response.status_code}")
  30. logger.info(f"Response content: {response.text[:500]}...") # 限制日志长度
  31. return response
  32. except requests.exceptions.RequestException as e:
  33. logger.error(f"Request failed: {str(e)}")
  34. raise
  35. def get(self, url: str, params: Optional[Dict] = None, **kwargs) -> requests.Response:
  36. """GET请求"""
  37. return self._request('GET', url, params=params, **kwargs)
  38. def post(self, url: str, data: Optional[Dict] = None,
  39. json: Optional[Dict] = None, **kwargs) -> requests.Response:
  40. """POST请求"""
  41. return self._request('POST', url, data=data, json=json, **kwargs)
  42. def put(self, url: str, data: Optional[Dict] = None,
  43. json: Optional[Dict] = None, **kwargs) -> requests.Response:
  44. """PUT请求"""
  45. return self._request('PUT', url, data=data, json=json, **kwargs)
  46. def delete(self, url: str, **kwargs) -> requests.Response:
  47. """DELETE请求"""
  48. return self._request('DELETE', url, **kwargs)
  49. def request(self, method: str, url: str, **kwargs) -> requests.Response:
  50. """通用请求方法"""
  51. return self._request(method, url, **kwargs)
  52. # 创建全局请求对象
  53. request_handler = RequestHandler()