From f7b365a1b8e69a640d09b7e58a8f600f85c6ace5 Mon Sep 17 00:00:00 2001 From: HuangHai <10402852@qq.com> Date: Tue, 2 Sep 2025 16:26:38 +0800 Subject: [PATCH] 'commit' --- dsLightRag/Liblib/T1_Test.py | 67 +++++++------- dsLightRag/Liblib/T1_VersionGet.py | 144 +++++++---------------------- 2 files changed, 67 insertions(+), 144 deletions(-) diff --git a/dsLightRag/Liblib/T1_Test.py b/dsLightRag/Liblib/T1_Test.py index 299f308e..e67c10ee 100644 --- a/dsLightRag/Liblib/T1_Test.py +++ b/dsLightRag/Liblib/T1_Test.py @@ -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()) \ No newline at end of file diff --git a/dsLightRag/Liblib/T1_VersionGet.py b/dsLightRag/Liblib/T1_VersionGet.py index 5a0e8f5f..e67c10ee 100644 --- a/dsLightRag/Liblib/T1_VersionGet.py +++ b/dsLightRag/Liblib/T1_VersionGet.py @@ -1,120 +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 - - -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}')" +import Config.Config def make_sign(uri): - # 当前毫秒时间戳(修正:使用整数类型) - 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访问密钥 + secret_key = Config.Config.LIBLIB_SECRETKEY + + # 当前毫秒时间戳 + 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 -# 请求API接口的uri地址(修正:使用相对路径,不包含域名) -uri = f"/api/model/version/get" -# 生成签名信息(确保在URL构建前调用) -signature_info = make_sign(uri) # 使用API_PATH而非完整URL - -# 构建完整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}" - -# 定义请求头 -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(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")) - # 解析响应数据 - - print("API响应结果:") - print(f"模型名称: {result.get('model_name')}") - print(f"版本号: {result.get('version_name')}") - print(f"是否可商用: {'是' if result.get('commercial_use') == '1' else '否'}") - print(f"模型链接: {result.get('model_url')}") - -except requests.exceptions.RequestException as e: - print(f"请求发生错误: {str(e)}") -""" -{ - "version_uuid": "21df5d84cca74f7a885ba672b5a80d19",//LiblibAI官网模型链接后缀 - "model_name": "AWPortrait XL" - "version_name": "1.1" - "baseAlgo": "基础算法 XL", - "show_type": "1",//公开可用的模型 - "commercial_use": "1",//可商用为1,不可商用为0 - "model_url": "https://www.liblib.art/modelinfo/f8b990b20cb943e3aa0e96f34099d794?versionUuid=21df5d84cca74f7a885ba672b5a80d19" - } -} -""" +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()) \ No newline at end of file