119 lines
3.8 KiB
Python
119 lines
3.8 KiB
Python
"""
|
|
请求头管理器
|
|
统一管理不同模块的请求头配置
|
|
"""
|
|
from typing import Dict, Optional
|
|
from dataclasses import dataclass, field
|
|
|
|
|
|
@dataclass
|
|
class HeaderConfig:
|
|
"""请求头配置"""
|
|
referer: Optional[str] = None
|
|
user_agent: Optional[str] = None
|
|
content_type: Optional[str] = None
|
|
authorization: Optional[str] = None
|
|
custom_headers: Dict[str, str] = field(default_factory=dict)
|
|
|
|
def to_dict(self) -> Dict[str, str]:
|
|
"""转换为字典格式"""
|
|
headers = {}
|
|
|
|
if self.referer:
|
|
headers['Referer'] = self.referer
|
|
if self.user_agent:
|
|
headers['User-Agent'] = self.user_agent
|
|
if self.content_type:
|
|
headers['Content-Type'] = self.content_type
|
|
if self.authorization:
|
|
headers['Authorization'] = self.authorization
|
|
|
|
# 添加自定义请求头
|
|
headers.update(self.custom_headers)
|
|
|
|
return headers
|
|
|
|
|
|
class HeaderManager:
|
|
"""请求头管理器"""
|
|
|
|
# 默认请求头配置
|
|
DEFAULT_HEADERS = HeaderConfig(
|
|
referer='https://yunxiu.f6car.cn/erp/view/index.html',
|
|
user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0'
|
|
)
|
|
|
|
# F6系统登录请求头
|
|
F6_LOGIN_HEADERS = HeaderConfig(
|
|
referer='https://yunxiu.f6car.com/kzf6/login/confirm',
|
|
user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/129.0.0.0'
|
|
)
|
|
|
|
# 简道云API请求头
|
|
JIANDAOYUN_API_HEADERS = HeaderConfig(
|
|
content_type='application/json',
|
|
# authorization 应该从配置中获取,这里只是示例
|
|
)
|
|
|
|
# 模块特定的请求头配置
|
|
_module_headers: Dict[str, HeaderConfig] = {
|
|
'default': DEFAULT_HEADERS,
|
|
'f6_login': F6_LOGIN_HEADERS,
|
|
'jiandaoyun_api': JIANDAOYUN_API_HEADERS,
|
|
}
|
|
|
|
@classmethod
|
|
def get_headers(cls, module_name: str = 'default', **overrides) -> Dict[str, str]:
|
|
"""
|
|
获取指定模块的请求头
|
|
|
|
Args:
|
|
module_name: 模块名称
|
|
**overrides: 覆盖的请求头配置
|
|
|
|
Returns:
|
|
请求头字典
|
|
"""
|
|
# 获取基础配置
|
|
config = cls._module_headers.get(module_name, cls.DEFAULT_HEADERS)
|
|
|
|
# 创建配置副本
|
|
header_config = HeaderConfig(
|
|
referer=overrides.get('referer', config.referer),
|
|
user_agent=overrides.get('user_agent', config.user_agent),
|
|
content_type=overrides.get('content_type', config.content_type),
|
|
authorization=overrides.get('authorization', config.authorization),
|
|
custom_headers={**config.custom_headers, **overrides.get('custom_headers', {})}
|
|
)
|
|
|
|
return header_config.to_dict()
|
|
|
|
@classmethod
|
|
def register_module_headers(cls, module_name: str, config: HeaderConfig):
|
|
"""
|
|
注册模块的请求头配置
|
|
|
|
Args:
|
|
module_name: 模块名称
|
|
config: 请求头配置
|
|
"""
|
|
cls._module_headers[module_name] = config
|
|
|
|
@classmethod
|
|
def update_module_headers(cls, module_name: str, **updates):
|
|
"""
|
|
更新模块的请求头配置
|
|
|
|
Args:
|
|
module_name: 模块名称
|
|
**updates: 要更新的配置项
|
|
"""
|
|
if module_name in cls._module_headers:
|
|
config = cls._module_headers[module_name]
|
|
for key, value in updates.items():
|
|
if hasattr(config, key):
|
|
setattr(config, key, value)
|
|
else:
|
|
config.custom_headers[key] = value
|
|
|