from typing import Dict, Optional
import time
import hashlib
import random
class HeaderGenerator:
"""即梦API请求头生成器(独立版本,无外部依赖)"""
# 常量定义
DEFAULT_ASSISTANT_ID = "513695"
VERSION_CODE = "5.8.0"
PLATFORM_CODE = "7"
# 基础请求头模板
BASE_HEADERS = {
"Accept": "application/json, text/plain, */*",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept-language": "zh-CN,zh;q=0.9",
"Cache-control": "no-cache",
"Last-event-id": "undefined",
"Origin": "https://jimeng.jianying.com",
"Pragma": "no-cache",
"Priority": "u=1, i",
"Referer": "https://jimeng.jianying.com",
"Sec-Ch-Ua": '"Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"',
"Sec-Ch-Ua-Mobile": "?0",
"Sec-Ch-Ua-Platform": '"Windows"',
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-origin",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
}
def __init__(
self,
assistant_id: Optional[str] = None,
version_code: Optional[str] = None,
platform_code: Optional[str] = None
):
"""初始化Header生成器
Args:
assistant_id: 助手ID,默认使用DEFAULT_ASSISTANT_ID
version_code: 版本代码,默认使用VERSION_CODE
platform_code: 平台代码,默认使用PLATFORM_CODE
"""
self.assistant_id = assistant_id or self.DEFAULT_ASSISTANT_ID
self.version_code = version_code or self.VERSION_CODE
self.platform_code = platform_code or self.PLATFORM_CODE
self.device_id = self._generate_device_id()
self.web_id = self._generate_web_id()
@staticmethod
def _get_timestamp() -> int:
"""获取当前时间戳
Returns:
int: 时间戳(秒)
"""
return int(time.time())
@staticmethod
def _md5(text: str) -> str:
"""计算MD5
Args:
text: 文本
Returns:
str: MD5字符串
"""
return hashlib.md5(text.encode('utf-8')).hexdigest()
@staticmethod
def _generate_device_id() -> int:
"""生成设备ID
Returns:
int: 设备ID
"""
return int(random.random() * 999999999999999999 + 7000000000000000000)
@staticmethod
def _generate_web_id() -> int:
"""生成网页ID
Returns:
int: 网页ID
"""
return int(random.random() * 999999999999999999 + 7000000000000000000)
def generate_cookie(self, token: str) -> str:
"""生成Cookie字符串
Args:
token: 访问token
Returns:
str: Cookie字符串
"""
return f"sessionid={token}; sessionid_ss={token}; sid_tt={token}; uid_tt={token}; uid_tt_ss={token}"
def generate_sign(self, uri: str, device_time: int) -> str:
"""生成签名
Args:
uri: 请求URI
device_time: 设备时间戳
Returns:
str: 签名字符串
"""
sign_text = f"9e2c|{uri[-7:]}|{self.platform_code}|{self.version_code}|{device_time}||11ac"
return self._md5(sign_text)
def generate_headers(
self,
token: str,
uri: str,
additional_headers: Optional[Dict[str, str]] = None
) -> Dict[str, str]:
"""生成完整的请求头
Args:
token: 访问token
uri: 请求URI(用于生成签名)
additional_headers: 额外的请求头
Returns:
Dict[str, str]: 完整的请求头字典
"""
device_time = self._get_timestamp()
sign = self.generate_sign(uri, device_time)
# 构建基础请求头
headers = {
**self.BASE_HEADERS,
"Appid": self.assistant_id,
"Appvr": self.version_code,
"Pf": self.platform_code,
"Cookie": self.generate_cookie(token),
"Device-Time": str(device_time),
"Sign": sign,
"Sign-Ver": "1"
}
# 合并额外的请求头
if additional_headers:
headers.update(additional_headers)
return headers
def generate_params(
self,
additional_params: Optional[Dict[str, str]] = None
) -> Dict[str, str]:
"""生成请求参数
Args:
additional_params: 额外的请求参数
Returns:
Dict[str, str]: 请求参数字典
"""
params = {
"aid": self.assistant_id,
"device_platform": "web",
"region": "CN",
"web_id": str(self.web_id)
}
if additional_params:
params.update(additional_params)
return params
def get_device_id(self) -> int:
"""获取设备ID
Returns:
int: 设备ID
"""
return self.device_id
def get_web_id(self) -> int:
"""获取Web ID
Returns:
int: Web ID
"""
return self.web_id