最近有人问怎么解析微云的音乐外链,于是我花了点时间看了一下。
例如有一个音乐分享地址:http://share.weiyun.com/37b92875f407f6d595c6eab92792d41a。
查看网页源码,源码里面没有音乐的下载地址,只有一个加密过的地址dl_encrypt_url
。
用firebug
调试了下,发现js
的解密函数太麻烦,所以放弃另寻他法。
先用firefox
的插件User Agent Switcher
伪装成手机浏览器:
然后访问页面,可以发现微云的手机版网页源码里有下载地址:
1 | <a class="ui-btn-open" href="http://sync.box.qq.com/share_dl.fcg?sharekey=37b92875f407f6d595c6eab92792d41a&uin=1989052999&skey=&fid=0ef59818-982c-42e6-96ef-85460737055c&dir=&pdir=478a8e765ccd740aa7b6436361a4fccb&zn=%E5%A4%A9%E4%B9%8B%E7%97%95%E5%A6%82%E5%BF%86%E7%8E%89%E5%84%BF%E6%9B%B2.mp3&os_info=iphone&browser=webkit&ver=11">打 开</a> |
但是匹配出这个地址后跳转,发现不成功。
复制这个地址在浏览器中打开,会发现网页返回403
错误,拒绝访问:
但是在微云网页里点击下载按钮后,会打开这个地址下载音乐。
根据上面的信息可以推断出,服务器判断了下载地址的来路referer
。
如果用curl
伪造来路访问下载地址,就不会出现403
错误了。
但是curl
不能进行301
重定向,而音乐外链需要301
重定向才能实现。
用firebug
监控网页请求,发现请求下载地址后,会跳转到真实的音乐地址:
那么可以从下载地址的响应头信息里匹配出Location
的地址再进行跳转。
把下面的代码保存为weiyun.php
文件,放在网站根目录:
1 |
|
如果分享地址为:http://share.weiyun.com/37b92875f407f6d595c6eab92792d41a
则外链地址为:http://www.poboke.com/weiyun.php/37b92875f407f6d595c6eab92792d41a.mp3