很多音乐播放器提供了在线试听功能,当我们需要下载的时候,经常会遇到需要付费或者下载客户端才能下载的情况。但是,我们想到,既然可以实现试听,那说明音乐数据已经传递到我们电脑上了,也就是说我们可以绕过付费或者需下载客户端的限制就可以下载音乐了。
下面以虾米音乐、酷我音乐、网易云音乐为例进行分析如何实现免费下载
【酷我音乐】
假如我们想下载这一首《凉凉》
http://www.kuwo.cn/yinyue/15249349?catalog=yueku2016
取出链接的ID:15249349
将下一个链接中的[ID]替换为我们的ID:
http://antiserver.kuwo.cn/anti.s?rid=MUSIC_[ID]&response=url&type=convert_url&format=mp3
替换之后的结果为:
http://antiserver.kuwo.cn/anti.s?rid=MUSIC_15249349&response=url&type=convert_url&format=mp3
访问这个地址就可以得到一个链接:
该链接就是我们音乐的下载地址
【虾米音乐】
这个的分析比上一个有点儿意思。
假如我们想下载这一首《极乐净土》
http://www.xiami.com/play?ids=/song/playlist/id/1776284090/object_name/default/object_id/0#loaded
取出链接的ID:1776284090
将下一个链接中的[ID]替换为我们的ID:
http://www.xiami.com/song/playlist/id/[ID]/object_name/default/object_id/0/cat/json?_ksTS=1496065184869_389&callback=jsonp390
替换之后的结果为:
访问该地址得到json格式的歌曲信息
其中节点location的值为关键信息
取出一个节点location的值:
8h2.c232576%55mtD1%4565utFao%%FE525EEphc65bd3Elt%lm2523%8E333_efE611-lp2i%FE1724_%1%kdac3-6%%Fc268%1F%1553e42d41%53odF315%154E2Fyeead45EAmn842E57E812a%7e949E-%5.15%%E79%%.u335cd6%n
取出第一个字节为:8
对其余字符进行平均分割:(这儿的行数大家有注意,就是上面的8)
h2.c232576%55mtD1%4565u
tFao%%FE525EEphc65bd3El
t%lm2523%8E333_efE611-l
p2i%FE1724_%1%kdac3-6%
%Fc268%1F%1553e42d41%5
3odF315%154E2Fyeead45E
Amn842E57E812a%7e949E-
%5.15%%E79%%.u335cd6%n
整齐的分割完毕之后,我们发现每行的第一个字母连起来就是http%3A%,是链接的开头,到了这儿,我们不禁有了一个大胆的想法,从上到下挨个取出每行的字母
我们对其进行整理之后得到:
http%3A%2F%2Fom5.alicdn.com%2F812%2F63453%5E812%2F21%5E%5E371%5E75%2F1776284%5E9%5E_148%5E3%5E1%5E31522.mp3%3Fauth_key%3Dced4e7316fa2ee5%5Ecda9c4b634d4d5d1-14966316%5E%5E-%5E-n
解码得到:
http://om5.alicdn.com/812/63453^812/21^^371^75/1776284^9^_148^3^1^31522.mp3?auth_key=ced4e7316fa2ee5^cda9c4b634d4d5d1-14966316^^-^-n
然后把^替换为0
把最后一字节n替换成null即可得到下载地址:
整个分析完之后也可以写一个脚本工具,一键转换链接,省的手动麻烦。
【网易云音乐】
假如我们想下载这一首《九九八十一》
http://music.163.com/#/song?id=419373902
取出链接的ID:419373902
作为参数传递到我们的加密函数get()中,得到一串字符串:
params=R%2BoJAeBwDkb0fPjhAbLyt4WadRGfd7j7JXfLZetvaWM72msCQa9nskwCJ9AUUtzYoQCGAlMNnOttPxErAlfi%2FV1XV%2BGUH3wnz0SHr1eu4Z4%3D&encSecKey=812abd084ce7e1ca926ba167e958c16da2006a85f2bb2889823dcaa18d4a03064e44e96b368c5a4c21129c8c844eff23b2b113e28c0c042cc99dd3a9874b08bdd7e2f8f3fb802f23537fd91532cd4ff5650a2fe56c6c1f380b1ed873a2d92e2b1d317ed03f10f94f599e9aff7e748d89f23d66faf369414c1fe91656eb91f1f5
(加密函数已经上传到了Github: https://gist.github.com/WithHades/cb89b0d661afc038cd0a558e96e14878)
得到之后,将字符串作为包体,POST访问http://music.163.com/weapi/song/enhance/player/url?csrf_token=
就可以得到音乐的下载地址啦,对于付费音乐同样适用