From f19d942f020fc31aa611d0f10deb36530a7b9ae6 Mon Sep 17 00:00:00 2001 From: NULL-LC <64722907+NULL-LC@users.noreply.github.com> Date: Fri, 14 Aug 2020 17:23:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=85=E5=AE=B9=E8=A7=81=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 39 +++++---- config.php | 50 +++++------ functions.php | 72 ++++++++-------- index.php | 205 +++++++++++++++----------------------------- static/functions.js | 10 +-- static/index.css | 4 +- 6 files changed, 152 insertions(+), 228 deletions(-) diff --git a/README.md b/README.md index ab8b75c9..7abdf481 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # baiduwp-php PanDownload 网页复刻版,PHP 语言版
-本项目是依据[baiduwp](https://github.com/TkzcM/baiduwp)的javascript版本改写而来,仅供大家学习参考
-另外使用的时候能不能保留一下作者信息呀(就是菜单栏的Made by Yuan_Tuo),谢~ +本项目是依据 [baiduwp](https://github.com/TkzcM/baiduwp) 的 JavaScript 版本改写而来,仅供大家学习参考
+另外使用的时候能不能保留一下作者信息呀(就是菜单栏的 Made by Yuan_Tuo),谢~ ## Demo [已加密,暂不开放!](https://imwcr.cn/api/bdwp/) @@ -12,7 +12,7 @@ PanDownload 网页复刻版,PHP 语言版
define('BDUSS', ''); define('STOKEN', ''); define('IsCheckPassword', true); -define('Password', '请在这里填写密码啦ヾ(≧▽≦*)o'); +define('Password', '请在这里填写密码啦!ヾ(≧▽≦*)o'); ``` - 前两项替换成你自己的 SVIP 信息就行,获取 cookie 方法见视频 [BV1Yh411d7Gd](https://www.bilibili.com/video/BV1Yh411d7Gd) - 第三项是是否需要密码的选项 @@ -20,24 +20,25 @@ define('Password', '请在这里填写密码啦ヾ(≧▽≦*)o'); - 详细信息可见 `config.php` 的注释 ## Thanks -- [baiduwp](https://github.com/TkzcM/baiduwp): javascript 版本 -- [PanDownload](https://pandownload.com): static pages -- [KinhDown](https://t.me/kinhdown): client type -- [PNL](https://www.lanzous.com/u/pnl): download method +- [baiduwp JavaScript 版](https://github.com/TkzcM/baiduwp "GitHub 项目") +- [PanDownload 网站](https://pandownload.com/ "PanDownload 网站") +- [KinhDown 客户端](https://t.me/kinhdown/ "KinhDown 客户端") +- [PNL 下载方式](https://www.lanzous.com/u/pnl "PNL 下载方式") ## New Changes -- 以下修改由 [LC](https://github.com/lc6464 "LC") 完成 - - 新增自行选择是否需要密码功能:2020-8-13 - - 配置、函数与程序分离(`php`):2020-8-13 ~ 2020-8-14 - - 修复 `errno` 不是 -21 且不正常时 HTTP 500 服务器错误的问题:2020-8-13 - - 修复 GET 方法访问 `index.php?download` 出错的问题:2020-8-13 - - 修复 POST 方法访问 `index.php?download` 参数不齐全出错的问题:2020-8-14 - - 修复未配置或者配置了普通用户的 BDUSS 和 STOKEN 时无法获取下载链接显示空链接的问题:2020-8-14 - - 样式、JavaScript 与页面分离(`前端`):2020-8-14 - - 优化数据传输:2020-8-14 - - 优化用户体验:2020-8-14 - - 优化打开文件夹的表现(原来是直接提示不可用,现在可以跳转到百度网盘官方的分享页面):2020-8-14 +- 以下修改由 [LC](https://github.com/lc6464 "LC") 完成:2020-8-14 + - 配置、函数与程序分离(`php`) + - 修复 POST 方法访问 `?download` 参数不齐全出错的问题 + - 修复未配置或配置了普通用户的 `BDUSS` 和 `STOKEN` 时显示空链接的问题 + - 样式、JavaScript 与页面分离(`前端`) + - 优化数据传输 + - 优化用户体验 + - 优化打开文件夹的表现(原来直接提示不可用,现在跳转到百度网盘官方的分享页面) + - 优化程序效率 + - 使用函数减少重复工作的代码量 + - 增加注释 + - 优化前端代码 ## 坑或不确定 - `static/functions.js` - - 40 行 \ No newline at end of file + - 36 行 \ No newline at end of file diff --git a/config.php b/config.php index c5164e76..ed8246ba 100644 --- a/config.php +++ b/config.php @@ -1,30 +1,30 @@ -* @link https://imwcr.cn/ -* @link https://space.bilibili.com/88197958 -* -* @author LC -* @link https://lcwebsite.cn/ -* @link https://space.bilibili.com/52618445 -*/ + * Pandownload PHP 复刻版配置文件 + * + * 务必要保证此文件存在,否则整个服务将会不可使用! + * + * 务必要设置 SVIP 账号的 BDUSS 和 STOKEN ,否则将会无法获取链接! + * + * 请按提示修改配置!请勿随意修改常量名等不可更改的内容! + * + * 若你要向公网开启服务,务必要启用密码验证功能!否则后果自负! + * 请不要使用弱密码!否则后果自负! + * 若只在局域网开放,则可根据个人喜好开启或关闭密码。 + * + * @version 1.2.1 + * + * @author Yuan_Tuo + * @link https://imwcr.cn/ + * @link https://space.bilibili.com/88197958 + * + * @author LC + * @link https://lcwebsite.cn/ + * @link https://space.bilibili.com/52618445 + */ +if (!defined('init')){ http_response_code(403); header('Content-Type: text/plain; charset=utf-8'); die('想啥呢?访问这个文件?'); } // 直接访问处理程序 + define('BDUSS', ''); // 你的 SVIP BDUSS define('STOKEN', ''); // 你的 SVIP STOKEN define('IsCheckPassword', true); // 设为 true 则要求密码为变量 Password 的值,否则提示密码错误;设为 false 则不需要密码。 -define('Password', '请在这里填写密码啦ヾ(≧▽≦*)o'); // 在下载器首页需要输入的密码,如果将 IsCheckPassWord 设为 false 则无论设置什么都会失效。 - -if (!defined('init')){ http_response_code(403); header('Content-Type: text/plain; charset=utf-8'); die('想啥呢?访问这个文件?'); } // 直接访问处理程序 \ No newline at end of file +define('Password', '请在这里填写密码啦!ヾ(≧▽≦*)o'); // 在下载器首页需要输入的密码,如果将 IsCheckPassWord 设为 false 则无论设置什么都会失效。 \ No newline at end of file diff --git a/functions.php b/functions.php index 4d806f7e..382dbb8c 100644 --- a/functions.php +++ b/functions.php @@ -1,26 +1,28 @@ -* @link https://imwcr.cn/ -* @link https://space.bilibili.com/88197958 -* -* @author LC -* @link https://lcwebsite.cn/ -* @link https://space.bilibili.com/52618445 -*/ + * Pandownload PHP 复刻版函数文件 + * + * 务必要保证此文件存在,否则整个服务将会不可使用! + * + * 请勿随意修改此文件!如需更改相关配置请到 config.php ! + * + * @version 1.2.1 + * + * @author Yuan_Tuo + * @link https://imwcr.cn/ + * @link https://space.bilibili.com/88197958 + * + * @author LC + * @link https://lcwebsite.cn/ + * @link https://space.bilibili.com/52618445 + */ +if (!defined('init')){ http_response_code(403); header('Content-Type: text/plain; charset=utf-8'); die('想啥呢?访问这个文件?'); } // 直接访问处理程序 + // main function post($url, $data, array $headerArray) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); - curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); //忽略ssl + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // 忽略ssl curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); @@ -33,7 +35,7 @@ function post($url, $data, array $headerArray) { function get($url, array $headerArray) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //忽略ssl + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 忽略ssl curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray); @@ -41,11 +43,10 @@ function get($url, array $headerArray) { curl_close($ch); return $output; } -function head($url, array $headerArray) { - // curl 获取响应头 +function head($url, array $headerArray) { // curl 获取响应头 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //忽略ssl + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 忽略ssl curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出 curl_setopt($ch, CURLOPT_HEADER, true); // 返回 response header 默认 false 只会获得响应的正文 @@ -59,15 +60,12 @@ function head($url, array $headerArray) { return $header; } function getSubstr($str, $leftStr, $rightStr) { - $left = strpos($str, $leftStr); - //echo '左边:'.$left; - $right = strpos($str, $rightStr, $left); - //echo '
右边:'.$right; + $left = strpos($str, $leftStr); // echo '左边:'.$left; + $right = strpos($str, $rightStr, $left); // echo '
右边:'.$right; if ($left < 0 or $right < $left) return ''; return substr($str, $left + strlen($leftStr), $right - $left - strlen($leftStr)); } -//格式化size显示 -function formatSize($b, $times = 0) { +function formatSize($b, $times = 0) { // 格式化size显示 if ($b > 1024) { $temp = $b / 1024; return formatSize($temp, $times + 1); @@ -95,8 +93,7 @@ function formatSize($b, $times = 0) { return sprintf('%.2f', $b) . $unit; } } -// 检查密码 -function CheckPassword() { +function CheckPassword() { // 检查密码 if (IsCheckPassword) { if ((!isset($_POST["password"])) || $_POST["password"] != Password) die('
@@ -111,8 +108,7 @@ function verifyPwd($surl_1, $pwd) { // 验证提取码 $data = "pwd=$pwd"; $headerArray = array("User-Agent: netdisk", "Referer: https://pan.baidu.com/disk/home"); $json1 = post($url, $data, $headerArray); - $json1 = json_decode($json1, true); - // -12 提取码错误 + $json1 = json_decode($json1, true); // -12 提取码错误 if ($json1["errno"] == 0) return $json1["randsk"]; else return 1; } @@ -121,7 +117,7 @@ function getSign($surl, $randsk) { $url = 'https://pan.baidu.com/s/1' . $surl; $headerArray = array( "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.514.1919.810 Safari/537.36", - "Cookie: BDUSS=" . constant("BDUSS") . ";STOKEN=" . constant("STOKEN") . ";BDCLND=" . $randsk . ";" + "Cookie: BDUSS=" . BDUSS . ";STOKEN=" . STOKEN . ";BDCLND=" . $randsk . ";" ); $json2 = get($url, $headerArray); $re = '/yunData.setData\(({.+)\);/'; @@ -137,13 +133,16 @@ function getFileList($shareid, $uk, $randsk) { $url = 'https://pan.baidu.com/share/list?app_id=250528&channel=chunlei&clienttype=0&desc=0&num=100&order=name&page=1&root=1&shareid=' . $shareid . '&showempty=0&uk=' . $uk . '&web=1'; $headerArray = array( "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.514.1919.810 Safari/537.36", - "Cookie: BDUSS=" . constant("BDUSS") . ";STOKEN=" . constant("STOKEN") . ";BDCLND=" . $randsk . ";", + "Cookie: BDUSS=" . BDUSS . ";STOKEN=" . STOKEN . ";BDCLND=" . $randsk . ";", "Referer: https://pan.baidu.com/disk/home" ); $json3 = get($url, $headerArray); $json3 = json_decode($json3, true); return $json3; } +function fileInfo($filename, $size, $md5, $server_ctime) { // 输出 HTML 字符串 + return '

文件名:' . $filename . '

文件大小:' . formatSize($size) . '

文件MD5:' . $md5 . '

上传时间:' . date("Y年m月d日 H:i:s", $server_ctime) . '

'; +} // 获取下载链接 function getDlink($fs_id, $timestamp, $sign, $randsk, $share_id, $uk) { @@ -156,12 +155,11 @@ function getDlink($fs_id, $timestamp, $sign, $randsk, $share_id, $uk) { $url = 'https://pan.baidu.com/api/sharedownload?app_id=250528&channel=chunlei&clienttype=12&sign=' . $sign . '×tamp=' . $timestamp . '&web=1'; $headerArray = array( "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.514.1919.810 Safari/537.36", - "Cookie: BDUSS=" . constant("BDUSS") . ";STOKEN=" . constant("STOKEN") . ";BDCLND=" . $randsk . ";", + "Cookie: BDUSS=" . BDUSS . ";STOKEN=" . STOKEN . ";BDCLND=" . $randsk . ";", "Referer: https://pan.baidu.com/disk/home" ); $res3 = post($url, $postdata, $headerArray); $res3 = json_decode($res3, true); - //var_dump($postdata, $res3); //没有 referer 就 112 ,然后没有 sekey 参数就 118 -20??? // 参数 类型 描述 // list json array 文件信息列表 @@ -178,6 +176,4 @@ function getDlink($fs_id, $timestamp, $sign, $randsk, $share_id, $uk) { // list[0]["width"] int 图片宽度 // list[0]["date_taken"] int 图片拍摄时间 return $res3; -} - -if (!defined('init')){ http_response_code(403); header('Content-Type: text/plain; charset=utf-8'); die('想啥呢?访问这个文件?'); } // 直接访问处理程序 \ No newline at end of file +} \ No newline at end of file diff --git a/index.php b/index.php index 245921bd..68d36ddc 100644 --- a/index.php +++ b/index.php @@ -1,40 +1,38 @@ -* @link https://imwcr.cn/ -* @link https://space.bilibili.com/88197958 -* -* @author LC -* @link https://lcwebsite.cn/ -* @link https://space.bilibili.com/52618445 -*/ + * Pandownload PHP 复刻版主文件 + * + * 功能描述:使用百度 SVIP 账号获取真实下载地址,与 Pandownload 原版无关 + * 使用的时候请保留一下作者信息呀(就是菜单栏的 Made by Yuan_Tuo),谢~ + * 有的注释不是很完整,见谅~ + * + * 请勿随意修改此文件!如需更改相关配置请到 config.php ! + * + * 此项目 GitHub 地址:https://github.com/yuantuo666/baiduwp-php + * + * @version 1.2.1 + * + * @author Yuan_Tuo + * @link https://imwcr.cn/ + * @link https://space.bilibili.com/88197958 + * + * @author LC + * @link https://lcwebsite.cn/ + * @link https://space.bilibili.com/52618445 + */ // 导入配置和函数 define('init', true); if (file_exists('config.php')) { require('config.php'); } else { - http_response_code(503); - header('Content-Type: text/plain; charset=utf-8'); + http_response_code(503); header('Content-Type: text/plain; charset=utf-8'); die('缺少配置文件!无法正常运行程序! 请重新 Clone 项目并配置!'); } if (file_exists('functions.php')) { require('functions.php'); } else { - http_response_code(503); - header('Content-Type: text/plain; charset=utf-8'); + http_response_code(503); header('Content-Type: text/plain; charset=utf-8'); die('缺少函数定义文件!无法正常运行程序! 请重新 Clone 项目并配置!'); } @@ -66,32 +64,32 @@
- +
- -
'; - } else if ($filejson["errno"] != 0) { - // 鬼知道发生了啥,比如说 -7 - echo '
-
'; - } else { - // 终于正常了 - //var_dump($filejson); + if ($filejson["errno"] == -21) echo '
'; // 链接失效 + else if ($filejson["errno"] != 0) echo '
'; // 鬼知道发生了啥,比如说 -7 + else { // 终于正常了 $filecontent = '
"; } - } else { - echo '
-
'; - } - } elseif (isset($_GET["download"])) { + } else echo '
'; + } elseif (isset($_GET["download"])) { // 解析下载地址页面 if ($_SERVER['REQUEST_METHOD'] == 'POST') { if (isset($_POST["fs_id"]) && isset($_POST["time"]) && isset($_POST["sign"]) && isset($_POST["randsk"]) && isset($_POST["share_id"]) && isset($_POST["uk"])) { $fs_id = $_POST["fs_id"]; @@ -191,74 +165,29 @@ $md5 = $json4["list"][0]["md5"]; $filename = $json4["list"][0]["server_filename"]; $size = $json4["list"][0]["size"]; - $server_ctime = (int)$json4["list"][0]["server_ctime"] + 28800; //服务器创建时间 +8:00 - $headerArray = array( - 'User-Agent: LogStatistic', - 'Cookie: BDUSS=' . constant("BDUSS") . ';' - ); + $server_ctime = (int)$json4["list"][0]["server_ctime"] + 28800; // 服务器创建时间 +8:00 + $headerArray = array( 'User-Agent: LogStatistic', 'Cookie: BDUSS=' . BDUSS . ';' ); $getRealLink = head($dlink, $headerArray); // 禁止重定向 $getRealLink = strstr($getRealLink, "Location"); $getRealLink = substr($getRealLink, 10); $realLink = getSubstr($getRealLink, "http://", "\r\n"); // 删除 http:// - // 3. 使用dlink下载文件 - // 4. dlink有效期为8小时 - // 5. 必需要设置User-Agent字段 - // 6. dlink存在302跳转 - if ($realLink == "") { - echo '
-
-
'; - } else { - echo '
-
-
'; - } - } else { - echo '
-
-
'; - } - } else { - echo '
-
-
'; - } - } else { - echo '
-
-
'; - } - } else { ?> + // 1. 使用 dlink 下载文件 2. dlink 有效期为8小时 3. 必需要设置 User-Agent 字段 4. dlink 存在 HTTP 302 跳转 + if ($realLink == "") echo '
'; // 未配置 SVIP 账号 + else echo '
'; // 成功! + } else echo '
'; // 未知错误 + } else echo '
'; // 参数不齐 + } else echo '
'; // 方法错误 + } else { // 首页 ?>
-
分享链接在线解析
+
百度网盘分享链接在线解析
diff --git a/static/functions.js b/static/functions.js index 96ad60d3..c2f1b606 100644 --- a/static/functions.js +++ b/static/functions.js @@ -19,12 +19,8 @@ function validateForm() { } function dl(fs_id, timestamp, sign, randsk, share_id, uk) { var form = $(''); - form.append(` - - - - - `); + form.append(` + `); $(document.body).append(form); form.submit(); } function getIconClass(filename) { @@ -51,5 +47,5 @@ function getIconClass(filename) { } function ToSharePage(surl) { sweetAlert('即将跳转','暂不支持文件夹下载!\r\n即将跳转到百度网盘官方的分享页面!','info'); - return setTimeout(u => { open('https://pan.baidu.com/s/' + u); }, 1800, surl); + return setTimeout(u => { open('https://pan.baidu.com/s/' + u); }, 1750, surl); } \ No newline at end of file diff --git a/static/index.css b/static/index.css index b48b24d6..7417fc43 100644 --- a/static/index.css +++ b/static/index.css @@ -6,4 +6,6 @@ body { background: url("https://pandownload.com/img/baiduwp/bg.png"); } .card-text { word-wrap: break-word; } form input, form button { height: 3em; } .alert { position: relative; top: 5em; } -.alert-heading { height: 0.8em; } \ No newline at end of file +.alert-heading { height: 0.8em; } +.anchor { vertical-align: top; } +.anchor + h4 { display: inline-block; margin-left: 0.4rem; } \ No newline at end of file