| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- 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}")
|