import requests from typing import Dict,Optional from Config.APIConfig import BASE_URLS, ENV, TIMEOUT from Utils.Log import Logger logger = Logger(log_name="API_Base.log") class RequestHandler: """封装请求方法""" def __init__(self): self.session = requests.Session() self.base_url = BASE_URLS.get(ENV, '') def _request(self, method: str, url: str, **kwargs) -> requests.Response: """基础请求方法""" # 拼接完整URL if not url.startswith(('http://', 'https://')): url = f"{self.base_url}{url}" # 设置超时 kwargs.setdefault('timeout', TIMEOUT) # 记录请求日志 logger.info(f"Request: {method.upper()} {url}") if kwargs.get('params'): logger.info(f"Request params: {kwargs['params']}") if kwargs.get('json'): logger.info(f"Request json: {kwargs['json']}") if kwargs.get('data'): logger.info(f"Request data: {kwargs['data']}") try: response = self.session.request(method, url, **kwargs) # 记录响应日志 logger.info(f"Response status: {response.status_code}") logger.info(f"Response content: {response.text[:500]}...") # 限制日志长度 return response except requests.exceptions.RequestException as e: logger.error(f"Request failed: {str(e)}") raise def get(self, url: str, params: Optional[Dict] = None, **kwargs) -> requests.Response: """GET请求""" return self._request('GET', url, params=params, **kwargs) def post(self, url: str, data: Optional[Dict] = None, json: Optional[Dict] = None, **kwargs) -> requests.Response: """POST请求""" return self._request('POST', url, data=data, json=json, **kwargs) def put(self, url: str, data: Optional[Dict] = None, json: Optional[Dict] = None, **kwargs) -> requests.Response: """PUT请求""" return self._request('PUT', url, data=data, json=json, **kwargs) def delete(self, url: str, **kwargs) -> requests.Response: """DELETE请求""" return self._request('DELETE', url, **kwargs) def request(self, method: str, url: str, **kwargs) -> requests.Response: """通用请求方法""" return self._request(method, url, **kwargs) # 创建全局请求对象 request_handler = RequestHandler()