网易云API请求body分析 【一】
import random import math from Crypto.Cipher import AES import codecs import base64 class niub: def __init__(self): self.key = '0CoJUm6Qyw8W8jud' self.f = '00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7' self.e = '010001' self.singer_id = '1411492497' self.post_url1 = 'https://music.163.com/weapi/user/getfolloweds?csrf_token=' self.post_url2 = 'https://music.163.com/weapi/v1/play/record?csrf_token=' # 生成16个随机字符 def _generate_random_strs(self, length): string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" # 控制次数参数i i = 0 # 初始化随机字符串 random_strs = "" while i < length: e = random.random() * len(string) # 向下取整 e = math.floor(e) random_strs = random_strs + list(string)[e] i = i + 1 return random_strs # AES加密 def _AESencrypt(self, msg, key): # 如果不是16的倍数则进行填充(paddiing) padding = 16 - len(msg) % 16 msg = msg + padding * chr(padding) # 用来加密或者解密的初始向量(必须是16位) iv = '0102030405060708' Cipher = AES.new(key.encode('utf-8'), AES.MODE_CBC, iv.encode('utf-8')) # 加密后得到的是bytes类型的数据 encryptedbytes = Cipher.encrypt(msg.encode('utf8')) # 使用Base64进行编码,返回byte字符串 encodestrs = base64.b64encode(encryptedbytes) # 对byte字符串按utf-8进行解码 enctext = encodestrs.decode('utf-8') return enctext # RSA加密 def _RSAencrypt(self, randomstrs, key, f): # 随机字符串逆序排列 string = randomstrs[::-1] # 将随机字符串转换成byte类型数据 text = bytes(string, 'utf-8') seckey = int(codecs.encode(text, encoding='hex'), 16) ** int(key, 16) % int(f, 16) return format(seckey, 'x').zfill(256) def _get_params1(self, page): offset = (page - 1) * 20 msg = '{"userId": "1411492497", "offset":' + str(offset) + ', "total": "false", "limit": "20", "csrf_token": ""}' enctext = self._AESencrypt(msg, self.key) # 生成长度为16的随机字符串 i = self._generate_random_strs(16) # 两次AES加密之后得到params的值 encText = self._AESencrypt(enctext, i) # RSA加密之后得到encSecKey的值 encSecKey = self._RSAencrypt(i, self.e, self.f) return encText, encSecKey def start_requests(self): params, encSecKey = self._get_params1(0) liebiao = [] formdata = { 'params': params, 'encSecKey': encSecKey } return formdata if __name__ == '__main__': x = niub() msg = '{"userId": "1411492497", "offset":"1", "total": "false", "limit": "20", "csrf_token": ""}' key = '0CoJUm6Qyw8W8jud' # print(x.start_requests()) heji = [] heji1 = [] #print(i) for i in range(51, 53): #控制生成params, encSecKey heji =params heji1=encSecKey data = x._get_params1(i) heji.append(data[0]) heji1.append(data[1]) print(heji) print(heji1) print(heji[0])#params print(heji1[1])# encSecKey #print(data['params']) #print(data['encSecKey'])
首先谷歌浏览器抓包网易云网站:得到请求body

然后在去代码里找params,encSecKey,找到后,写python代码,就可以通用网易云所有请求。上面代码就是根据页码生成params,encSecKey。
    如果人生还有重来,那就不叫人生。
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号