另类方法下载MP3 - 采集方案-采集之家


采集方案>>另类方法下载MP3

另类方法下载MP3

发布:2009, September 17, 9:27 PM 浏览:3084

有朋友想下载几首歌曲,但一直搞不定那个网站的防盗链。我拿来分析了一下,可以采集到,但是用火车采集器无法直接获取到。怎么办呢?经过一番思考,使用了多页,完美的下载到了mp3,不过过程麻烦了点。

就是这个站,http://61tg.com/erge/zweg/6551.html 我们用这个页面做例子说明。经过研究,我们会发现,mp3的下载地址是

XML/HTML代码
  1. http://dx1.61tg.com/eg/zw/erge385.mp3?  tflag=1253193012pin=3e375c36705461191f458b5f4b1a7e92ip=60.168.251.209

 

其中, /eg/zw/erge385.mp3 这个参数在当前网页里有地址,源码片断如下,每个页面都不一样的。

 

XML/HTML代码
  1. <div class="playes">  
  2. <script type="text/javascript">var rurl="eg/zw/erge385.mp3?"+UUAuthCode;</script>  
  3. <script type="text/javascript" src="/skin/61tg/js/play.js"></script>  
  4. </div>  

 

另一个参数是脚本即时生成的,是不停变化的。此参数不对也不能下载。我们查到该参数是在文件 skin/61tg/js/playserver.js  里生成的

 

JavaScript代码
  1. var i=Math.floor(Math.random()*18+1);   
  2. var DomainUrl = "61tg.com";   
  3. var AuthUrl = 'dx1.61tg.com/';   
  4. SetCookie("uuauth""ok"null"/", DomainUrl, false);   
  5. document.write("<script language='javascript' src='http:\/\/" + AuthUrl + "\/getuuauthcode\/'><\/script>");   
  6.   
  7. function SetCookie(name, value)   
  8. {   
  9.     var expdate = new Date();   
  10.     var argv = SetCookie.arguments;   
  11.     var argc = SetCookie.arguments.length;   
  12.     var expires = (argc > 2) ? argv[2] : null;   
  13.     var path = (argc > 3) ? argv[3] : null;   
  14.     var domain = (argc > 4) ? argv[4] : null;   
  15.     var secure = (argc > 5) ? argv[5] : false;   
  16.     if(expires!=null) expdate.setTime(expdate.getTime() + ( expires * 1000 ));   
  17.     document.cookie = name + "=" + escape (value) +((expires == null) ? "" : ("; expires="+ expdate.toGMTString()))+((path == null) ? "" : ("; path=" + path)) +((domain == null) ? "" : ("; domain=" + domain))+((secure == true) ? "; secure" : "");   
  18. }   
  19. var AuthCode;   
  20. try{   
  21.     AuthCode = UUAuthCode;   
  22.     //alert("检测成功" + UUAuthCode);   
  23. }catch(e){   
  24.     //alert("检测失败,请检查您的浏览器是否支持cookie" + e.message);   
  25. }  

经分析是从页面 http://dx1.61tg.com/getuuauthcode/生成了最后的参数。

现在问题很明确了,我们可以获取两个变化的参数,但需要将两个参数合并在一块才可以下载文件。出现的问题是,这两个参数不在同一个页面,是在一个固定的页面和一个变化的页面里的。经过研究发现,这个uuauthcode是即时生成,对每个内容页面都是适用的,只要那个第一个参数是一样的就可以了。也就是说,它是通过一种加密算法来验证下载权限,但不是针对每一个内容有不同的算法。最后,我想到自已写程序处理这个参数,使用多页构造最后的下载地址。下边大概帖一下需要注意的几个地方。

大小: 43.13 K
尺寸: 500 x 234
浏览: 144 次
点击打开新窗口浏览全图

 

大小: 65.27 K
尺寸: 475 x 481
浏览: 122 次
点击打开新窗口浏览全图

 

这里的test这个站点是我本地的站点,我写了个程序用来处理这个数据,这里我请求了那个固定的页面,将两个参数变量合并到一块了。

PHP代码
  1. <?php   
  2. $stra = vget('http://dx1.61tg.com/getuuauthcode/');   
  3. preg_match("/UUAuthCode=\"(.*?)\";/",$stra,$key);   
  4.   
  5. $url=$_GET['url'];   
  6. $url.=$key[1];   
  7. echo $url;   
  8. function vget($url){ // 模拟获取内容函数      
  9.     $curl = curl_init(); // 启动一个CURL会话      
  10.     curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址                  
  11.     curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查      
  12.     curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在      
  13.     curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器      
  14.     curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 0); // 使用自动跳转      
  15.     curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer      
  16.     curl_setopt($curl, CURLOPT_HTTPGET, 1); // 发送一个常规的Post请求     
  17.     curl_setopt($curl, CURLOPT_COOKIE, 'uutags=ok;uuauth=ok;'); // 读取上面所储存的Cookie信息      
  18.     curl_setopt($curl, CURLOPT_TIMEOUT, 100); // 设置超时限制防止死循环      
  19.     curl_setopt($curl, CURLOPT_HEADER, 1); // 显示返回的Header区域内容      
  20.     curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回      
  21.     $tmpInfo = curl_exec($curl); // 执行操作      
  22.     if (curl_errno($curl)) {      
  23.        echo 'Errno'.curl_error($curl);      
  24.     }      
  25.     curl_close($curl); // 关闭CURL会话      
  26.     return $tmpInfo// 返回数据      
  27. }   
  28. ?>  

大小: 37.35 K
尺寸: 396 x 394
浏览: 119 次
点击打开新窗口浏览全图

 

下边是使用正则获取最后的下载地址。

大小: 34.38 K
尺寸: 500 x 201
浏览: 118 次
点击打开新窗口浏览全图

 

这里是没有下载的情况。

大小: 32.7 K
尺寸: 490 x 255
浏览: 109 次
点击打开新窗口浏览全图

 

这里是探测真实地址并下载的情况。

大小: 38.43 K
尺寸: 486 x 334
浏览: 125 次
点击打开新窗口浏览全图

 

最后使用采集器下载时的情况,需要注意的是还要设置user-agent,具体请大家自己抓包查看。

大小: 127.49 K
尺寸: 500 x 253
浏览: 151 次
点击打开新窗口浏览全图


相关信息

评论内容 (必填):

(*请输入图片后三位数字)

Copyright © 2007-2009 采集之家 All Rights Reserved. Powered by SaBlog XHTML 1.0. 清除Cookies. 陕ICP备07009732号