import hashlib import json import random import time import uuid import requests def generate_signature(params): """ 根据提供的规则生成签名参数 Args: params: 参数字典 data: 附加数据字符串,默认为空 Returns: MD5加密后的签名值 """ # 固定的密钥字符串 secret_str = 'NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt' # 对参数键进行排序 sorted_keys = sorted(params.keys()) # 构建参数字符串 params_list = [] for key in sorted_keys: value = params[key] # 如果值是字典或列表,转换为JSON字符串 if isinstance(value, (dict, list)): params_list.append(f"{key}={json.dumps(value)}") else: params_list.append(f"{key}={value}") params_string = ''.join(params_list) # 构建待加密的完整字符串 sign_string = f"{secret_str}{params_string}{secret_str}" # 计算MD5值 return hashlib.md5(sign_string.encode('utf-8')).hexdigest() # 示例使用 if __name__ == "__main__": # 生成13位时间戳 clienttime = str(int(time.time() * 1000) + (24*60*60*1000)) # 生成动态UUID(去除连字符) dynamic_uuid = str(uuid.uuid4()).replace('-', '') # 从URL中提取的参数 url_params = { "source_id": "90137", "appid": "3116", "clientver": "10759", "clienttime": clienttime, "mid": "47995299944446761610674068629729839814", "uuid": dynamic_uuid, "dfid": "3eU9yX3FbBTW0y2kdP0DTMWc", "token": "h565AF57B69A2E829C335AFD81CB07A97763BD035030492587613B6C45C5F7B497E9166B3CD4B29A2EC0DECDD0682A88076253E85B197C047E17409C581AC78AB3BFC5BDEE45BE933EFB0D89BC2B979B378D17A58B86B9CF62408742D5D38BEBF057809E30397DB4C6674307945B46FCBFCE76D1B5B0A2460C089178DB6B4DB2D5", "userid": "1028024275", "srcappid": "2919" } # 生成签名 signature = generate_signature(url_params) print(f"生成的签名: {signature}") url_params["signature"] = signature # 构建完整的URL(不含签名参数) base_url = "/youth/v1/recharge/receive_vip_listen_song" # 构建查询字符串 query_string = "&".join([f"{key}={value}" for key, value in url_params.items()]) full_url = f"{base_url}?{query_string}" print("完整的URL:") print(full_url) # 发送POST请求 try: # 生成 20 到 40 秒之间的随机整数 sleep_time = random.uniform(20, 40) time.sleep(sleep_time) print(f"休眠了 {sleep_time:.2f} 秒") # 注意:这里需要根据实际情况确定完整的请求URL # 假设基础URL为 https://api.example.com 1770033832473 complete_url = f"http://gateway.kugou.com{full_url}" response = requests.post(complete_url, timeout=10) print(f"\nPOST请求响应状态码: {response.status_code}") print(f"响应内容: {response.text}") except requests.exceptions.RequestException as e: print(f"请求发生错误: {e}")