引言
本次借用的是一个api解析接口
https://api.toubiec.cn/wyapi.html
有兴趣的可以看一下咯
过程
首先填入必须的内容测试一下
![图片[1]-网易云批量解析歌单音乐【不限音质】-小魏博客](https://ziyuanwang-zhongguo.oss-cn-chengdu.aliyuncs.com/zyw/2025/04/20250404181945431-1024x524.png)
产生了两个请求
第一个
![图片[2]-网易云批量解析歌单音乐【不限音质】-小魏博客](https://ziyuanwang-zhongguo.oss-cn-chengdu.aliyuncs.com/zyw/2025/04/20250404182047561.png)
他只是拿到一个token值,应该是在下一步请求有作用,作为请求参数使用的。
![图片[3]-网易云批量解析歌单音乐【不限音质】-小魏博客](https://ziyuanwang-zhongguo.oss-cn-chengdu.aliyuncs.com/zyw/2025/04/20250404182151752.png)
哦吼,果然,但是呢,这两个token好像不一样的嘞。
第一个
token: “576986637110cba1d6d54ba497a6c535”
第二个负载中的请求
token: “fdaae74c208b3a6e631180a0b367578b”
这个时候有经验的小伙子应该有头绪了吧,需要逆向呗,熟悉开发的应该可以直接看出来大概是什么加密
好家伙来吧,断xhr请求查呗
先复制一下请求地址
![图片[4]-网易云批量解析歌单音乐【不限音质】-小魏博客](https://ziyuanwang-zhongguo.oss-cn-chengdu.aliyuncs.com/zyw/2025/04/20250404182601599.png)
添加到断点中
![图片[5]-网易云批量解析歌单音乐【不限音质】-小魏博客](https://ziyuanwang-zhongguo.oss-cn-chengdu.aliyuncs.com/zyw/2025/04/20250404182715372-1024x434.png)
再次点击解析
断到js文件了,跳出函数看看
发现了这个请求过程
![图片[6]-网易云批量解析歌单音乐【不限音质】-小魏博客](https://ziyuanwang-zhongguo.oss-cn-chengdu.aliyuncs.com/zyw/2025/04/20250404184618791.png)
其中有一个
b就是第一次请求的token值
咋们看看他到底把这个token怎么搞的,看this
![图片[7]-网易云批量解析歌单音乐【不限音质】-小魏博客](https://ziyuanwang-zhongguo.oss-cn-chengdu.aliyuncs.com/zyw/2025/04/20250404184922312.png)
![图片[8]-网易云批量解析歌单音乐【不限音质】-小魏博客](https://ziyuanwang-zhongguo.oss-cn-chengdu.aliyuncs.com/zyw/2025/04/20250404185201950.png)
跳转到这个代码的位置
![图片[9]-网易云批量解析歌单音乐【不限音质】-小魏博客](https://ziyuanwang-zhongguo.oss-cn-chengdu.aliyuncs.com/zyw/2025/04/20250404185328762.png)
![图片[10]-网易云批量解析歌单音乐【不限音质】-小魏博客](https://ziyuanwang-zhongguo.oss-cn-chengdu.aliyuncs.com/zyw/2025/04/20250404185344833.png)
妥妥的MD5加密,还是32位小写的
测试一下呗
上面提到的
![图片[11]-网易云批量解析歌单音乐【不限音质】-小魏博客](https://ziyuanwang-zhongguo.oss-cn-chengdu.aliyuncs.com/zyw/2025/04/20250404185441118.png)
实用工具:https://www.sojson.com/md5/
![图片[12]-网易云批量解析歌单音乐【不限音质】-小魏博客](https://ziyuanwang-zhongguo.oss-cn-chengdu.aliyuncs.com/zyw/2025/04/20250404185539844-1024x237.png)
是不是一样的??比较简单吧,现在使用python代码还原一下请求过程
首先模拟获取初始token 的值代码
headers_token = {
'origin': 'https://api.toubiec.cn',
'referer': 'https://api.toubiec.cn/wyapi.html',
}
response_token = requests.post('https://api.toubiec.cn/api/get-token.php', headers=headers_token)
print(response_token.text)
token_data = response_token.json() # 将响应转换为JSON
token_token = token_data['token'] # 获取token值
然后把这个值进行MD5加密
md5_hash = hashlib.md5(token_token.encode()).hexdigest()
在第二步请求的时候注意下
头部会增加第一次请求获得的token
![图片[13]-网易云批量解析歌单音乐【不限音质】-小魏博客](https://ziyuanwang-zhongguo.oss-cn-chengdu.aliyuncs.com/zyw/2025/04/20250404185909421.png)
所以请求头需要改动一下
headers = {
'authorization': f'Bearer {token_token}',
'origin': 'https://api.toubiec.cn',
'referer': 'https://api.toubiec.cn/wyapi.html',
}
m_yy = 'https://music.163.com/song?id=23285358'
json_data2 = {
'url': m_yy,
'level': 'standard',
'type': 'song',
'token': md5_hash,
}
response2 = requests.post('https://api.toubiec.cn/api/music_v1.php', headers=headers, json=json_data2)
print(response2.text)
这样子我们就模拟了整个过程
现在就是拿到网易云歌单的链接,然后循环解析咯
值得注意的是,经过测试
音质是负载中的level,
分别是
1. 标准音质 (standard)
2. 极高音质 (exhigh)
3. 无损音质 (lossless)
4. 高解析度无损 (hires)
5. 高清环绕音 (jyeffect)
6. 沉浸环绕硬音 (sky)
7. 超声母带 (jymaster)
拿到网易云歌单批量链接
首先随便选择一个歌单
https://music.163.com/playlist?id=9307596864&uct2=U2FsdGVkX1+ajxNilGFrD9UhiclOXV0nGWTVeXHD0kU=
浏览器访问测试一下,
![图片[14]-网易云批量解析歌单音乐【不限音质】-小魏博客](https://ziyuanwang-zhongguo.oss-cn-chengdu.aliyuncs.com/zyw/2025/04/20250409095920176.png)
哦吼,这不是完犊子了吗,但是我记得之前明明可以查看全部列表的,后来查阅了一些资料,当请求cookies中存在
os=pc
才会显示全部,测试一下呗
经过查询在下面这个请求里面有音乐名称的数据
![图片[15]-网易云批量解析歌单音乐【不限音质】-小魏博客](https://ziyuanwang-zhongguo.oss-cn-chengdu.aliyuncs.com/zyw/2025/04/20250409100616452-1024x478.png)
ok,直接模拟
使用xpath提取数据
![图片[16]-网易云批量解析歌单音乐【不限音质】-小魏博客](https://ziyuanwang-zhongguo.oss-cn-chengdu.aliyuncs.com/zyw/2025/04/20250409101326933-1024x446.png)
但是呢,提取结果并不如意
![图片[17]-网易云批量解析歌单音乐【不限音质】-小魏博客](https://ziyuanwang-zhongguo.oss-cn-chengdu.aliyuncs.com/zyw/2025/04/20250409101356261-1024x569.png)
提取结果并不是我们想要的,要么就是xpath规则写错了,但是我绝对没错。哇咔咔
但是从提取结果来看应该是使用了js动态生成内容
直接输出一下源代码看一下
![图片[18]-网易云批量解析歌单音乐【不限音质】-小魏博客](https://ziyuanwang-zhongguo.oss-cn-chengdu.aliyuncs.com/zyw/2025/04/20250409101908746-1024x502.png)
ok,现在重写规则。
![图片[19]-网易云批量解析歌单音乐【不限音质】-小魏博客](https://ziyuanwang-zhongguo.oss-cn-chengdu.aliyuncs.com/zyw/2025/04/20250409101959985-1024x508.png)
直接完美,上代码
import requests
from lxml import etree
cookies = {
'os': 'pc',
'nts_mail_user': '15682979226@163.com:-1:1',
'NMTID': '00Ob4PcY-remTf0BUhgm1b_ew60qfsAAAGVdit-gw',
'_iuqxldmzr_': '32',
'_ntes_nnid': '11ff561585afaf64b9f00c09f0efc244,1741444316564',
'_ntes_nuid': '11ff561585afaf64b9f00c09f0efc244',
'WEVNSM': '1.0.0',
'WNMCID': 'jxrrtt.1741444324907.01.0',
'sDeviceId': 'YD-yGWvWEjUqgtAQgEUFFOGY388SKAZ60CH',
'WM_TID': 'zHnnWsC6nLRAEAVRREfXcn85SaU1ObXu',
'ntes_utid': 'tid._.3D0cx8AMvtNER0BQFALTIm85WORlZfQg._.0',
'__snaker__id': 'ZCgv4w7YrXSYfCKl',
'MUSIC_U': '00B25D2A1748CBB5AB10443E7AADDDB7E3F73E8A8EB6EDDA9F83895C54DEF9C5C9E5B0C0C5CEE6E57151D96E904A4473DE8CD003300CE663455CE289EA3FB0BFC651D31A8C6DA98504E1C98BE2178B853DADCD517AA778CD7704F0A1F1EDB215FF746707FE53006D43B4194E4C4641AF947A61793E314F966EB38C50B09B91AF97D435E211327F861A7EBD5C6F4B9FEFE1C31B72D5F12DF2CF56762F4379435B79FD1C1D1604067F639847030858C9BB7CD3376EF789AB9BD1F332683D32015FA4B81331EDA67CC59B74174970135B94D4C88C933886013347D36ACA00641F234BEA9B09FD7B01A66E37F47A38D3C1BEECCFDF462D5CEEA9CA3D3C5A37D9007298F8B46DED9F212E46EA8FB00A24B03ECD8FF2B64E3DB4642B377FC9F85B3ABC90AB8B1AD7C4897E6F721A9CD048C41AB4DE030F37AFD82EF70E779401F69384990E1B781BF8C2DBA89D5A1E5205A0B0196C15B1C2949021A45D27E57E6F8F4CB6',
'ntes_kaola_ad': '1',
'gdxidpyhxdE': 'SSrSqxh2ysB%2B3sKxl1GJoU4VrMqbwEAOfrPOZRfLDOHnRqT36YTuVv44kYSOCpWxCNQoAfaHjpnjg4bITsxtLM3r19YPgYNIRIYETts2hhyRVbLk%5CHyEkJxqEdG7c4EL%2FE948vK91oG6BCpPz3n%2FSPLoENghNeKQrpUg9%2BCEZeuJMrna%3A1741757975122',
'NTES_P_UTID': 'wRA2Wnuml77FpM91xrb7iW86unNv7Cts|1743487482',
'P_INFO': 'm15682979226@163.com|1743487482|1|d90_client|00&99|CN&1743474928&d90_client#CN&null#10#0#0|156226&1|d90_client|15682979226@163.com',
'__csrf': '6a695cc404b6237b1135f9a864b26c35',
'JSESSIONID-WYYY': 'oNv5%2Bp3UXF%5CI5zp9lm6UE%2BcH7%5Cz1snU%5C%2FsjUNwrF7d5SHsceo5akWK2K%5C7KSgjl6%2FF58Z1pU5880%2FUj%5CQ30XmaptQjaz5U%2F70cXgY2OdP%5CnVoAJvbE58%2FwGpOCm%2F%2FwY8s8gi1XV6HZl%5C8TMStfvcD1s2yJkHcY6VZFAJ2aJPMzxRaq1u%3A1744194453911',
'WM_NI': 'GnBzn1TOs8ilb%2BqNCJZdRROlXQwTSZ85IVAO%2Fu9YkUQ1k4CsaHvDr%2F%2FVQH%2B6eQO71RDO8XI2R5w0ZWNwUfSSEHqIBLDEuEDvozgX%2Fs0O1eVSnNxu5GunNfW7PMOYia%2FmWGE%3D',
'WM_NIKE': '9ca17ae2e6ffcda170e2e6ee92d564b0ecad8ec4639a968ab7c15b828a8aadc75c83bf89ccf73daa94898bca2af0fea7c3b92a85b28e9bed3b9891bdd9ec68a2f5bfafc2429abc9eb3ce689c8fb9b5d252fceb87b7c445edabf7baea5f93efa5d5c279a398baa5f125ed8a9fa9aa3ea78f81d8b45a8891f8b9cc3a92ebb9d1d95d8ea99b87d2598798bfaac148889bbba6c77eada6a9b9ae79f491ff86d559ae92b896b84db7b28287d63d949381baec6bedb399a8c837e2a3',
}
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'zh-CN,zh;q=0.9',
# 'cookie': 'nts_mail_user=15682979226@163.com:-1:1; NMTID=00Ob4PcY-remTf0BUhgm1b_ew60qfsAAAGVdit-gw; _iuqxldmzr_=32; _ntes_nnid=11ff561585afaf64b9f00c09f0efc244,1741444316564; _ntes_nuid=11ff561585afaf64b9f00c09f0efc244; WEVNSM=1.0.0; WNMCID=jxrrtt.1741444324907.01.0; sDeviceId=YD-yGWvWEjUqgtAQgEUFFOGY388SKAZ60CH; WM_TID=zHnnWsC6nLRAEAVRREfXcn85SaU1ObXu; ntes_utid=tid._.3D0cx8AMvtNER0BQFALTIm85WORlZfQg._.0; __snaker__id=ZCgv4w7YrXSYfCKl; MUSIC_U=00B25D2A1748CBB5AB10443E7AADDDB7E3F73E8A8EB6EDDA9F83895C54DEF9C5C9E5B0C0C5CEE6E57151D96E904A4473DE8CD003300CE663455CE289EA3FB0BFC651D31A8C6DA98504E1C98BE2178B853DADCD517AA778CD7704F0A1F1EDB215FF746707FE53006D43B4194E4C4641AF947A61793E314F966EB38C50B09B91AF97D435E211327F861A7EBD5C6F4B9FEFE1C31B72D5F12DF2CF56762F4379435B79FD1C1D1604067F639847030858C9BB7CD3376EF789AB9BD1F332683D32015FA4B81331EDA67CC59B74174970135B94D4C88C933886013347D36ACA00641F234BEA9B09FD7B01A66E37F47A38D3C1BEECCFDF462D5CEEA9CA3D3C5A37D9007298F8B46DED9F212E46EA8FB00A24B03ECD8FF2B64E3DB4642B377FC9F85B3ABC90AB8B1AD7C4897E6F721A9CD048C41AB4DE030F37AFD82EF70E779401F69384990E1B781BF8C2DBA89D5A1E5205A0B0196C15B1C2949021A45D27E57E6F8F4CB6; ntes_kaola_ad=1; gdxidpyhxdE=SSrSqxh2ysB%2B3sKxl1GJoU4VrMqbwEAOfrPOZRfLDOHnRqT36YTuVv44kYSOCpWxCNQoAfaHjpnjg4bITsxtLM3r19YPgYNIRIYETts2hhyRVbLk%5CHyEkJxqEdG7c4EL%2FE948vK91oG6BCpPz3n%2FSPLoENghNeKQrpUg9%2BCEZeuJMrna%3A1741757975122; NTES_P_UTID=wRA2Wnuml77FpM91xrb7iW86unNv7Cts|1743487482; P_INFO=m15682979226@163.com|1743487482|1|d90_client|00&99|CN&1743474928&d90_client#CN&null#10#0#0|156226&1|d90_client|15682979226@163.com; __csrf=6a695cc404b6237b1135f9a864b26c35; JSESSIONID-WYYY=oNv5%2Bp3UXF%5CI5zp9lm6UE%2BcH7%5Cz1snU%5C%2FsjUNwrF7d5SHsceo5akWK2K%5C7KSgjl6%2FF58Z1pU5880%2FUj%5CQ30XmaptQjaz5U%2F70cXgY2OdP%5CnVoAJvbE58%2FwGpOCm%2F%2FwY8s8gi1XV6HZl%5C8TMStfvcD1s2yJkHcY6VZFAJ2aJPMzxRaq1u%3A1744194453911; WM_NI=GnBzn1TOs8ilb%2BqNCJZdRROlXQwTSZ85IVAO%2Fu9YkUQ1k4CsaHvDr%2F%2FVQH%2B6eQO71RDO8XI2R5w0ZWNwUfSSEHqIBLDEuEDvozgX%2Fs0O1eVSnNxu5GunNfW7PMOYia%2FmWGE%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6ee92d564b0ecad8ec4639a968ab7c15b828a8aadc75c83bf89ccf73daa94898bca2af0fea7c3b92a85b28e9bed3b9891bdd9ec68a2f5bfafc2429abc9eb3ce689c8fb9b5d252fceb87b7c445edabf7baea5f93efa5d5c279a398baa5f125ed8a9fa9aa3ea78f81d8b45a8891f8b9cc3a92ebb9d1d95d8ea99b87d2598798bfaac148889bbba6c77eada6a9b9ae79f491ff86d559ae92b896b84db7b28287d63d949381baec6bedb399a8c837e2a3',
'priority': 'u=0, i',
'referer': 'https://music.163.com/',
'sec-ch-ua': '"Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'iframe',
'os': 'pc',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'same-origin',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
}
response = requests.get(
'https://music.163.com/playlist?id=9307596864&uct2=U2FsdGVkX1+ajxNilGFrD9UhiclOXV0nGWTVeXHD0kU=',
cookies=cookies,
headers=headers,
)
html = response.text
# 创建HTML解析对象
parser = etree.HTMLParser()
tree = etree.HTML(html)
# 使用XPath提取歌曲链接和歌曲名称
tree = etree.HTML(html)
song_links = tree.xpath('//ul[@class="f-hide"]/li/a/@href')
print(song_links)
他的完整链接应该是
https://music.163.com/song?id=2159786566
so增加组合完整链接
output = []
for song_link in song_links:
full_link = "https://music.163.com" + song_link
output.append(full_link)
然后写入txt文件中看一下
with open("links.txt", "w") as file:
for link in output:
file.write(link + "\n")
![图片[20]-网易云批量解析歌单音乐【不限音质】-小魏博客](https://ziyuanwang-zhongguo.oss-cn-chengdu.aliyuncs.com/zyw/2025/04/20250409102504153.png)
ok现在链接全部搞完了,直接就是循环解析并且下载了
最后上所有代码
至此结束啦,也就是逆向一个接口负载,主要用的是,MD5加密,其余的没什么的。
- 1本博客内容仅供个人学习、研究和欣赏,未经授权禁止用于任何商业用途。
- 2博客中的代码示例仅用于教育目的,使用时请遵循相关开源协议和授权规定。
- 3转载或引用本站内容请注明出处,尊重原创,共同维护良好的创作环境。
- 4博客评论区欢迎理性讨论,请勿发表违反法律法规的言论,共建和谐社区。
- 5如有内容侵犯您的权益,请通过博客联系方式告知,将立即核实并处理。
- 6使用本站资源时产生的任何问题与后果需自行承担,请谨慎操作。
暂无评论内容