| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- import requests
- from typing import Dict, Any, Optional
- class HTTPClient:
- """HTTP请求工具类,用于发送各种HTTP请求"""
-
- def __init__(self, base_url: str, api_key: str = None):
- """
- 初始化HTTP客户端
-
- Args:
- base_url: API基础URL
- api_key: API密钥(Bearer token)
- """
- self.base_url = base_url.rstrip('/')
- self.api_key = api_key
- self.session = requests.Session()
-
- # 设置默认请求头
- if self.api_key:
- self.session.headers.update({
- 'Authorization': f'Bearer {self.api_key}'
- })
-
- def post(self, endpoint: str, data: Optional[Dict] = None,
- json: Optional[Dict] = None, files: Optional[Dict] = None,
- headers: Optional[Dict] = None) -> Dict[str, Any]:
- """
- 发送POST请求
-
- Args:
- endpoint: API端点路径(以/开头)
- data: 表单数据
- json: JSON数据
- files: 文件数据
- headers: 自定义请求头
-
- Returns:
- Dict: 响应JSON数据
-
- Raises:
- requests.exceptions.RequestException: 请求失败时抛出
- """
- url = f"{self.base_url}{endpoint}"
- response = self.session.post(
- url=url,
- data=data,
- json=json,
- files=files,
- headers=headers
- )
- response.raise_for_status() # 抛出HTTP错误
- return response.json()
-
- def get(self, endpoint: str, params: Optional[Dict] = None,
- headers: Optional[Dict] = None) -> Dict[str, Any]:
- """
- 发送GET请求
-
- Args:
- endpoint: API端点路径(以/开头)
- params: 查询参数
- headers: 自定义请求头
-
- Returns:
- Dict: 响应JSON数据
-
- Raises:
- requests.exceptions.RequestException: 请求失败时抛出
- """
- url = f"{self.base_url}{endpoint}"
- response = self.session.get(
- url=url,
- params=params,
- headers=headers
- )
- response.raise_for_status() # 抛出HTTP错误
- return response.json()
-
- def upload_file(self, endpoint: str, file_path: str, file_field_name: str = 'file',
- data: Optional[Dict] = None, headers: Optional[Dict] = None) -> Dict[str, Any]:
- """
- 上传文件
-
- Args:
- endpoint: API端点路径(以/开头)
- file_path: 本地文件路径
- file_field_name: 表单字段名称
- data: 额外的表单数据
- headers: 自定义请求头
-
- Returns:
- Dict: 响应JSON数据
-
- Raises:
- requests.exceptions.RequestException: 请求失败时抛出
- """
- # 打开文件并构建files字典
- with open(file_path, 'rb') as f:
- files = {
- file_field_name: (file_path.split('/')[-1], f)
- }
-
- # 发送POST请求
- return self.post(endpoint, data=data, files=files, headers=headers)
|