This commit is contained in:
2025-09-02 16:26:38 +08:00
parent 6cec8cf580
commit f7b365a1b8
2 changed files with 67 additions and 144 deletions

View File

@@ -1,45 +1,44 @@
import hashlib
import requests
import json
import hmac
from hashlib import sha1
import base64
import time
import string
import secrets
import uuid
from Config.Config import LIBLIB_SECRETKEY, LIBLIB_URL, LIBLIB_ACCESSKEY
import Config.Config
class SignatureInfo:
"""签名信息封装类对应Java的SignatureInfo类"""
def make_sign(uri):
"""
生成签名
"""
def __init__(self, signature: str, timestamp: int, signature_nonce: str):
self.signature = signature
self.timestamp = timestamp
self.signature_nonce = signature_nonce
# API访问密钥
secret_key = Config.Config.LIBLIB_SECRETKEY
def __repr__(self) -> str:
return f"SignatureInfo(signature='{self.signature}', timestamp={self.timestamp}, signature_nonce='{self.signature_nonce}')"
# 当前毫秒时间戳
timestamp = str(int(time.time() * 1000))
# 随机字符串
signature_nonce = str(uuid.uuid4())
# 拼接请求数据
content = '&'.join((uri, timestamp, signature_nonce))
# 生成签名
digest = hmac.new(secret_key.encode(), content.encode(), sha1).digest()
# 移除为了补全base64位数而填充的尾部等号
sign = base64.urlsafe_b64encode(digest).rstrip(b'=').decode()
return sign, timestamp, signature_nonce
def make_sign(uri, timestamp, signatureNonce):
# 当前毫秒时间戳(修正:使用整数类型)
if timestamp == 0:
timestamp = int(time.time() * 1000)
if signatureNonce is None:
signatureNonce = ''.join(secrets.choice(string.ascii_letters + string.digits) for _ in range(10))
content = f"{uri}&{timestamp}&{signatureNonce}"
print(content)
signature = hmac.new(LIBLIB_SECRETKEY.encode('utf-8'), content.encode('utf-8'), digestmod=hashlib.sha1).digest()
signature = base64.urlsafe_b64encode(signature).decode('utf-8').strip()
return SignatureInfo(signature, timestamp, signatureNonce)
# 请求API接口的uri地址修正使用相对路径不包含域名
uri = f"/api/model/version/get"
# 生成签名信息确保在URL构建前调用
signature_info = make_sign(LIBLIB_URL+uri,1756799766502,'K91nkXyrCH') # 使用API_PATH而非完整URL
print(signature_info)
if __name__ == '__main__':
uri = "/api/model/version/get"
print(make_sign(uri))
sign, timestamp, signature_nonce = make_sign(uri)
url = f'{Config.Config.LIBLIB_URL}{uri}?AccessKey={Config.Config.LIBLIB_ACCESSKEY}&Signature={sign}&Timestamp={timestamp}&SignatureNonce={signature_nonce}'
print(url)
# Content-Type application/json
# - 请求body
versionUuid="21df5d84cca74f7a885ba672b5a80d19"
# 编写POST提交并接收返回值
import requests
response = requests.post(url, json={"versionUuid":versionUuid})
print(response.json())