Files
moss-ai/mcp/didatodolist-mcp/utils/http.py
雷雨 8635b84b2d init
2025-12-15 22:05:56 +08:00

136 lines
3.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
HTTP 请求工具类
"""
from typing import Optional, Dict, Any, Union
import requests
# 定义AuthenticationError异常类
class AuthenticationError(Exception):
"""认证错误"""
def __init__(self, message: str):
self.message = message
super().__init__(self.message)
class HttpClient:
"""HTTP请求客户端"""
def __init__(self, token: str):
"""
初始化HTTP客户端
Args:
token: API访问令牌
"""
self.token = token
self.base_url = "https://api.dida365.com"
self.headers = {
"Cookie": f"t={token}",
"Content-Type": "application/json",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
def _handle_response(self, response: requests.Response) -> Union[Dict[str, Any], bool]:
"""
处理API响应
Args:
response: 请求响应对象
Returns:
Dict 或 bool: 响应数据或成功状态
Raises:
AuthenticationError: 认证失败
APIError: API调用失败
"""
if response.status_code == 401:
raise AuthenticationError("认证失败请检查token是否有效")
if response.status_code >= 400:
try:
error_data = response.json()
except ValueError:
error_data = {"error": response.text}
raise APIError(
message=error_data.get("error", "未知错误"),
status_code=response.status_code,
response=error_data
)
if response.status_code == 204:
return True
try:
return response.json()
except ValueError:
return True
def get(self, endpoint: str, params: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
"""
发送GET请求
Args:
endpoint: API端点
params: 查询参数
Returns:
Dict: 响应数据
"""
response = requests.get(
f"{self.base_url}{endpoint}",
headers=self.headers,
params=params
)
return self._handle_response(response)
def post(self, endpoint: str, data: Dict[str, Any]) -> Dict[str, Any]:
"""
发送POST请求
Args:
endpoint: API端点
data: 请求数据
Returns:
Dict: 响应数据
"""
response = requests.post(
f"{self.base_url}{endpoint}",
headers=self.headers,
json=data
)
return self._handle_response(response)
def put(self, endpoint: str, data: Dict[str, Any]) -> Dict[str, Any]:
"""
发送PUT请求
Args:
endpoint: API端点
data: 请求数据
Returns:
Dict: 响应数据
"""
response = requests.put(
f"{self.base_url}{endpoint}",
headers=self.headers,
json=data
)
return self._handle_response(response)
def delete(self, endpoint: str) -> bool:
"""
发送DELETE请求
Args:
endpoint: API端点
Returns:
bool: 是否删除成功
"""
response = requests.delete(
f"{self.base_url}{endpoint}",
headers=self.headers
)
return self._handle_response(response)