This commit is contained in:
2025-09-02 16:04:10 +08:00
parent ac1be0ef70
commit 6cec8cf580
4 changed files with 417 additions and 64 deletions

View File

@@ -1,51 +1,98 @@
import hashlib
import requests
import json
import hmac
from hashlib import sha1
import base64
import time
import uuid
import string
import secrets
from Config.Config import LIBLIB_SECRETKEY, LIBLIB_URL, LIBLIB_ACCESSKEY
class SignatureInfo:
"""签名信息封装类对应Java的SignatureInfo类"""
def __init__(self, signature: str, timestamp: int, signature_nonce: str):
self.signature = signature
self.timestamp = timestamp
self.signature_nonce = signature_nonce
def __repr__(self) -> str:
return f"SignatureInfo(signature='{self.signature}', timestamp={self.timestamp}, signature_nonce='{self.signature_nonce}')"
def make_sign(uri):
"""
生成签名
"""
# 当前毫秒时间戳
timestamp = str(int(time.time() * 1000))
# 随机字符串
signature_nonce = str(uuid.uuid4())
# 拼接请求数据
content = '&'.join((uri, timestamp, signature_nonce))
# 生成签名
digest = hmac.new(LIBLIB_SECRETKEY.encode(), content.encode(), sha1).digest()
# 移除为了补全base64位数而填充的尾部等号
sign = base64.urlsafe_b64encode(digest).rstrip(b'=').decode()
return sign, timestamp, signature_nonce
# 当前毫秒时间戳(修正:使用整数类型)
timestamp = int(time.time() * 1000)
# 生成10位字母数字随机字符串修正匹配Java的randomAlphanumeric
signature_nonce = ''.join(secrets.choice(string.ascii_letters + string.digits) for _ in range(10))
# 拼接签名内容修正使用Java相同的顺序和分隔符
content = f"{uri}&{timestamp}&{signature_nonce}"
# HMAC-SHA1签名修正确保编码一致
signature = hmac.new(LIBLIB_SECRETKEY.encode('utf-8'), content.encode('utf-8'), digestmod=hashlib.sha1).digest()
# Base64 URL安全编码修正使用URL安全编码
signature = base64.urlsafe_b64encode(signature).decode('utf-8').strip()
print(f"签名调试信息:\nURI: {uri}\nTimestamp: {timestamp}\nNonce: {signature_nonce}\nContent: {content}\nSignature: {signature}")
return SignatureInfo(signature, timestamp, signature_nonce)
# 请求API接口的uri地址
uri = f"{LIBLIB_URL}/api/model/version/get"
Signature, timestamp, signature_nonce = make_sign(uri)
# 请求API接口的uri地址(修正:使用相对路径,不包含域名)
uri = f"/api/model/version/get"
# 生成签名信息确保在URL构建前调用
signature_info = make_sign(uri) # 使用API_PATH而非完整URL
print(Signature)
print(timestamp)
print(signature_nonce)
# 构建完整URL修正此处才拼接基础URL
# API配置确保以下常量已定义
LIBLIB_URL = "https://openapi.liblibai.cloud"
API_PATH = '/api/model/version/get'
LIBLIB_ACCESSKEY = 'sOCtVLVTNOZkRMajlhzCmg' # 从Java代码同步的AccessKey
version_uuid = 'YOUR_VERSION_UUID' # 替换为实际UUID
# 构建完整URL修正使用signature_info对象属性
full_url = f"{LIBLIB_URL}{API_PATH}?version_uuid={version_uuid}&AccessKey={LIBLIB_ACCESSKEY}&Signature={signature_info.signature}&Timestamp={signature_info.timestamp}&SignatureNonce={signature_info.signature_nonce}"
url = f"{uri}?AccessKey={LIBLIB_ACCESSKEY}&Signature={Signature}&Timestamp={timestamp}&SignatureNonce={signature_nonce}"
# 设置请求头
# 定义请求头
headers = {"Content-Type": "application/json"}
# 定义请求体
version_uuid = "4bb1335feb1e4d2eafe5a77bb93e861f"
# 准备请求体数据
request_body = {"version_uuid": version_uuid}
# 发送请求使用正确的full_url变量
response = requests.post(full_url, headers=headers, json=request_body)
# 添加详细调试输出
#print(f"请求URL: {url}")
# 修正在使用headers前定义请求头
headers = {"Content-Type": "application/json"}
# 定义version_uuid变量请替换为实际的UUID值
version_uuid = "4bb1335feb1e4d2eafe5a77bb93e861f"
# 构建请求体
request_body = {"version_uuid": version_uuid}
print(f"请求头: {headers}")
print(f"请求体: {json.dumps(request_body)}")
try:
# 发送POST请求
response = requests.post(url, headers=headers, data=json.dumps(request_body))
response.raise_for_status() # 检查请求是否成功
# 修改请求方法为POST并添加完整参数
response = requests.post(LIBLIB_URL+uri, headers=headers, json=request_body)
# 增加详细调试输出
print(f"完整请求URL: {LIBLIB_URL}{uri}")
print(f"请求方法: POST")
print(f"请求头: {headers}")
print(f"请求体: {json.dumps(request_body, ensure_ascii=False)}")
print(f"响应状态码: {response.status_code}")
print(f"响应内容: {response.text}")
# 验证version_uuid有效性请替换为实际有效的UUID
version_uuid = "有效的模型版本UUID"
print(f"请求体: {json.dumps(request_body)}")
print(f"响应状态码: {response.status_code}")
print(f"响应内容: {response.text}") # 打印完整响应内容
response.raise_for_status()
result = response.json()
print(result.get("code"))
print(result.get("msg"))