本帖最后由 芊雨千寻 于 2017-7-2 10:55 编辑
不提供分享后的解析思路,其实很简单的但是访问多了老出验证码很尴尬。。。。。php登陆百度云很麻烦的,但是通过浏览器复制下来百度的登陆状态cookies好像很久都不过期的。【这块一笔略过!!!】
我先直接贴出来下载连接的构成部分
http://pan.baidu.com/api/download?sign=oxlEasNaH2DxAmRKDFPD9lYp%2BW%2F2aGyCJRDi2MRR6C8zHpOlK3%2FW0g%3D%3D×tamp=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 bdstoken sign1 都是是在pan.baidu.com/disk/home#list/path=%2F&vmode=list获取的到
实在是弄不好这个代码功能的呀 我还是上传附件吧 下面代码需要网上找“php代码格式化”工具格式化一下
pan.baidu.com-a.rar
(610 Bytes, 下载次数: 30)
<?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参数');
|