芊雨千寻 发表于 2017-6-30 16:15

php登陆状态百度网盘获取文件下载链接【思路|部分代码】

本帖最后由 芊雨千寻 于 2017-7-2 10:55 编辑

不提供分享后的解析思路,其实很简单的但是访问多了老出验证码很尴尬。。。。。php登陆百度云很麻烦的,但是通过浏览器复制下来百度的登陆状态cookies好像很久都不过期的。【这块一笔略过!!!】
我先直接贴出来下载连接的构成部分
http://pan.baidu.com/api/download?sign=oxlEasNaH2DxAmRKDFPD9lYp%2BW%2F2aGyCJRDi2MRR6C8zHpOlK3%2FW0g%3D%3D&timestamp=1498807871&fidlist=%5B285896498311340%5D&type=dlink&channel=chunlei&web=1&app_id=250528&bdstoken=d6a70723cb4107b9ee077f4c54c04a13&logid=MTQ5ODgwODAwNDY4NTAuODE1NzI4MTEzNzExMzA5Nw==&clienttype=0
登陆状态下去掉多余参数的下载链接:
http://pan.baidu.com/api/download?sign=oxlEasNaH2DxAmRKDFPD9lYp%2BW%2F2aGyCJRDi2MRR6C8zHpOlK3%2FW0g%3D%3Dtimestamp=1498807871&fidlist=%5B285896498311340%5D
参数说明:

可有可无的参数
&type=dlink参数固定
&channel=chunlei参数固定
&web=1参数固定
&app_id=250528参数固定
&bdstoken=d6a70723cb4107b9ee077f4c54c04a13登陆状态值如果使用curl自带cookies就可以不需要此参数了,
&logid=MTQ5ODgwODAwNDY4NTAuODE1NzI4MTEzNzExMzA5Nw==参数可有可无 base64解码后 是“当前时间戳”和0到1之间的随机小数
&clienttype=0参数固定
主要参数:
timestamp=登陆时间 和 sign=
timestamp= 在pan.baidu.com/disk/home#list/path=%2F&vmode=list 就可以获取到
sign是bdstoken和sign1参数通过sign2执行出来的 看下面截图

&fidlist= 文件ID
通过以下链接获取的文件ID,把多余的参数去掉了,登陆状态是可以忽略的,获取制定目录下面的,文件和文件夹,来获取你想下载文件的文件ID
http://pan.baidu.com/api/list?dir=%2F&num=100&order=time&desc=1&clienttype=0&showempty=0&page=1
dir=当前目录
&num= 调用数量
&order=排序时间
&desc=1倒序
&clienttype=0不知道啥参数
&page=1 第几页

下面是重点php生成参数 sign 的方法

timestamp   bdstokensign1 都是是在pan.baidu.com/disk/home#list/path=%2F&vmode=list获取的到
实在是弄不好这个代码功能的呀 我还是上传附件吧 下面代码需要网上找“php代码格式化”工具格式化一下


<?php
function s($j,$r){
         $a = array();
      $p = array();
      $o = "";
      $v=strlen($j);
      $j = str_split($j,1);
      function charCodeAt($str){
                $ret = mb_convert_encoding($str, 'UTF-32BE', 'UTF-8');
                return hexdec(bin2hex($ret));
      }
      function fromCharCode($codes) {
         if (is_scalar($codes)) $codes= func_get_args();
         $str= '';
         foreach ($codes as $code) $str.= chr($code);
         return $str;
      }      
      for($q=0;$q<256;$q++){
                $a[$q]=charCodeAt($j[$q%$v]);
                $p[$q]=$q;
      }
                              for($u=$q=0;$q<256;$q++){
                $u=($u+$p[$q]+$a[$q])%256;
                $t=$p[$q];
                $p[$q]=$p[$u];
                $p[$u]=$t;
      }
      for($i=$u=$q=0;$q<strlen($r);$q++){
                $i=($i+1)%256;
                $u=($u+$p[$i])%256;
                $t=$p[$i];
                $p[$i]=$p[$u];
                $p[$u]=$t;
                $k=$p[(($p[$i]+$p[$u])%256)];
                $r2 = str_split($r,1);
                $o.=fromCharCode(charCodeAt($r2[$q])^$k);
      }
      return base64_encode($o);
      }
      echo s('bdstoken参数','sign参数');

芊雨千寻 发表于 2017-8-12 12:00

sosobdl 发表于 2017-8-7 12:09
我用楼主的方法搞出来的下载地址一直都是报错啊,{"errno":-6,"request_id":5067778083454698382} 看不懂这 ...

"-6":"请重新登录"我这个只是算法 百度登陆很麻烦 不过你可以通过浏览器 把登陆cookis复制下来 百度这个状态 好像永久不过期

sosobdl 发表于 2017-8-12 18:23

芊雨千寻 发表于 2017-8-12 12:00
"-6":"请重新登录"我这个只是算法 百度登陆很麻烦 不过你可以通过浏览器 把登陆cookis复制下来 百度这 ...

我就是存了cookie,可能是因为其他地方用这个账号导致cookie失效了。现在已经可以了。

heoo 发表于 2017-6-30 16:23

老哥,你分析出来了吗

另类飞翔 发表于 2017-6-30 16:25

厉害了 十分感谢分享

芊雨千寻 发表于 2017-6-30 16:28

heoo 发表于 2017-6-30 16:23
老哥,你分析出来了吗

不是很难 主要sign参数 其余的在页面中都能获取到

ningzhonghui 发表于 2017-6-30 16:51

这个必须支持,先收下学习先

芊雨千寻 发表于 2017-7-1 12:25

居然没人看这个,用了这个下载网站和视频网站就可以存在网盘里面解析出来加载了

xuanxingkong 发表于 2017-7-2 17:12

关键时看不懂啊

木鱼啊 发表于 2017-7-4 10:24

老哥, 这个sign的算法是怎么得到的, 我看了半天百度云盘登录和sign方法,都没搞明白这个算法是怎么得到的。。

芊雨千寻 发表于 2017-7-6 14:27

木鱼啊 发表于 2017-7-4 10:24
老哥, 这个sign的算法是怎么得到的, 我看了半天百度云盘登录和sign方法,都没搞明白这个算法是怎么得到的 ...
sign值是 bdstoken和sign1参数   通过sign2代码执行出来的你看我上面的截图放大

cracker_decoder 发表于 2017-7-11 07:01

百度cookie过期了,不绑定手机号登陆不了了,有办法破吗?
页: [1] 2
查看完整版本: php登陆状态百度网盘获取文件下载链接【思路|部分代码】