抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

最近有人问怎么解析微云的音乐外链,于是我花了点时间看了一下。
例如有一个音乐分享地址:http://share.weiyun.com/37b92875f407f6d595c6eab92792d41a
查看网页源码,源码里面没有音乐的下载地址,只有一个加密过的地址dl_encrypt_url
firebug调试了下,发现js的解密函数太麻烦,所以放弃另寻他法。

先用firefox的插件User Agent Switcher伪装成手机浏览器:
This is a picture without description

然后访问页面,可以发现微云的手机版网页源码里有下载地址:

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错误,拒绝访问:
This is a picture without description

但是在微云网页里点击下载按钮后,会打开这个地址下载音乐。
根据上面的信息可以推断出,服务器判断了下载地址的来路referer

如果用curl伪造来路访问下载地址,就不会出现403错误了。
但是curl不能进行301重定向,而音乐外链需要301重定向才能实现。

firebug监控网页请求,发现请求下载地址后,会跳转到真实的音乐地址:
This is a picture without description
那么可以从下载地址的响应头信息里匹配出Location的地址再进行跳转。

把下面的代码保存为weiyun.php文件,放在网站根目录:

weiyun.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
//最后更新时间:2013-12-12
//构造微云分享地址
preg_match('|\/.+\/(\w+)\.|', $_SERVER['REQUEST_URI'], $res);
$key = $res ? $res[1] : exit("Url format error!");
$url = $referer = "http://share.weiyun.com/$key";

//获取源码,匹配出下载地址
$src = curl_get_contents($url, "");
preg_match('|shareInfo = (.*);|Ui', $src, $res);
$json = $res ? json_decode($res[1]) : exit("Can not get shareInfo!");

//拼接歌曲链接
$songurl = implode("", array(
"http://".$json->dl_svr_host,
":".$json->dl_svr_port,
"/ftn_handler",
"/".$json->dl_encrypt_url,
"?fname=".urlencode($json->filename),
));
header("Location: $songurl");

//用curl获取网页源码
function curl_get_contents($url, $referer) {
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_REFERER, $referer);
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us)");
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
$src = curl_exec($curl);
curl_close($curl);
return $src;
}
?>

如果分享地址为:
http://share.weiyun.com/37b92875f407f6d595c6eab92792d41a

则外链地址为:
http://www.poboke.com/weiyun.php/37b92875f407f6d595c6eab92792d41a.mp3

评论