From e6805e9f1e2f157c9a0acb2565ddd7777d75df3d Mon Sep 17 00:00:00 2001 From: yuantuo666 <44130602+yuantuo666@users.noreply.github.com> Date: Thu, 27 Aug 2020 20:18:12 +0800 Subject: [PATCH] =?UTF-8?q?1.4.1=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.修改POST内容,让调用接口暂时失效 2.增加直链解析,可以不设置UA下载(不过并不稳定,且只支持50MB以下文件) --- README.md | 10 +++---- config.php | 4 +-- functions.php | 15 ++++++++--- index.php | 63 +++++++++++++++++++++++++++++++++++++++------ static/functions.js | 4 +-- 5 files changed, 74 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 3244e213..bf07f6e9 100644 --- a/README.md +++ b/README.md @@ -66,10 +66,8 @@ define('Password', '789'); - [LC优化版](https://github.com/lc6464 "LC") ## New Changes -- 当前版本:`1.4.0` -- 更新日期:2020-8-26 +- 当前版本:`1.4.1` +- 更新日期:2020-8-27 - 修改内容 - - 增加推送至aria2功能 - - 增加面包屑导航,便于寻找指定文件夹 - - 完善错误提示,获取列表超时会提示 - - 修复特殊路径报错(url传入时未编码) + - 修改POST内容,让调用接口暂时失效 + - 增加直链解析,可以不设置UA下载(不过并不稳定,且只支持50MB以下文件) diff --git a/config.php b/config.php index d1348cec..ff045247 100644 --- a/config.php +++ b/config.php @@ -12,14 +12,14 @@ * 请不要使用弱密码!否则后果自负! * 若只在局域网开放,则可根据个人喜好开启或关闭密码。 * - * @version 1.4.0 + * @version 1.4.1 * * @author Yuan_Tuo * @link https://imwcr.cn/ * @link https://space.bilibili.com/88197958 * */ -define('programVersion', '1.4.0'); +define('programVersion', '1.4.1'); if (!defined('init')){ // 直接访问处理程序 http_response_code(403); header('Content-Type: text/plain; charset=utf-8'); header('Refresh: 3;url=./'); die("HTTP 403 禁止访问!\r\n此文件是 PanDownload 网页复刻版 PHP 语言版项目版本 " . programVersion . " 的配置文件!\r\n禁止直接访问!"); diff --git a/functions.php b/functions.php index 98bad954..15a92ae8 100644 --- a/functions.php +++ b/functions.php @@ -7,7 +7,7 @@ * * 请勿随意修改此文件!如需更改相关配置请到 config.php ! * - * @version 1.4.0 + * @version 1.4.1 * * @author Yuan_Tuo * @link https://imwcr.cn/ @@ -183,11 +183,17 @@ function FileInfo(string $filename, float $size, string $md5, int $server_ctime) return '

文件名:' . $filename . '

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

文件MD5:' . $md5 . '

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

'; } -function getDlink(string $fs_id, string $timestamp, string $sign, string $randsk, string $share_id, string $uk) +function getDlink(string $fs_id, string $timestamp, string $sign, string $randsk, string $share_id, string $uk, string $bdstoken,bool $isnoualink) { // 获取下载链接 $app_id = 250528; //推荐应用ID:498065、309847、778750、250528(官方)、265486、266719; - $url = 'https://pan.baidu.com/api/sharedownload?app_id=' . $app_id . '&channel=chunlei&clienttype=12&sign=' . $sign . '×tamp=' . $timestamp . '&web=1'; + + if($isnoualink){ + $url = 'https://pan.baidu.com/api/sharedownload?app_id=' . $app_id . '&channel=chunlei&clienttype=0&sign=' . $sign . '×tamp=' . $timestamp . '&web=1&bdstoken='.$bdstoken;//获取直链 50MB以内 + }else{ + $url = 'https://pan.baidu.com/api/sharedownload?app_id=' . $app_id . '&channel=chunlei&clienttype=12&sign=' . $sign . '×tamp=' . $timestamp . '&web=1';//获取下载链接 + } + $data = "encrypt=0" . "&extra=" . urlencode('{"sekey":"' . urldecode($randsk) . '"}') . "&fid_list=[$fs_id]" . "&primaryid=$share_id" . "&uk=$uk" . "&product=share&type=nolimit"; $header = 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", @@ -195,7 +201,8 @@ function getDlink(string $fs_id, string $timestamp, string $sign, string $randsk "Referer: https://pan.baidu.com/disk/home" ); return json_decode(post($url, $data, $header), true); - //没有 referer 就 112 ,然后没有 sekey 参数就 118 -20??? + + //没有 referer 就 112 ,然后没有 sekey 参数就 118 -20出现验证码 // 参数 类型 描述 // list json array 文件信息列表 // names json 如果查询共享目录,该字段为共享目录文件上传者的uk和账户名称 diff --git a/index.php b/index.php index cd87a0c1..ff2d2642 100644 --- a/index.php +++ b/index.php @@ -12,7 +12,7 @@ * * 此项目 GitHub 地址:https://github.com/yuantuo666/baiduwp-php * - * @version 1.4.0 + * @version 1.4.1 * * @author Yuan_Tuo * @link https://imwcr.cn/ @@ -168,6 +168,7 @@ $uk = $_POST["uk"]; $sign = $root["sign"]; $timestamp = $root["timestamp"]; + $bdstoken = $root["bdstoken"]; $filejson = GetDir($_POST["dir"], $randsk, $shareid, $uk); if ($filejson["errno"] != 0) echo '
'; // 鬼知道发生了啥 @@ -187,7 +188,7 @@ for ($i = 0; $i < count($filejson["list"]); $i++) { //开始输出文件列表 $file = $filejson["list"][$i]; if ($file["isdir"] === 0) $filecontent .= '
  • - ' . $file["server_filename"] . ' + ' . $file["server_filename"] . ' ' . formatSize($file["size"]) . '
  • '; else $filecontent .= '
  • ' . $file["server_filename"] . '
  • '; @@ -207,6 +208,7 @@ $timestamp = $root["timestamp"]; $shareid = $root["shareid"]; $uk = $root["uk"]; + $bdstoken = $root["bdstoken"]; if ($filejson["errno"] != 0) echo '
    '; // 鬼知道发生了啥 else { // 终于正常了 @@ -220,7 +222,7 @@ for ($i = 0; $i < count($filejson["list"]); $i++) { $file = $filejson["list"][$i]; if ($file["isdir"] === 0) $filecontent .= '
  • - ' . $file["server_filename"] . ' + ' . $file["server_filename"] . ' ' . formatSize($file["size"]) . '
  • '; else $filecontent .= '
  • ' . $file["server_filename"] . '
  • '; @@ -234,14 +236,30 @@ if (IsCheckPassword and (!isset($_SESSION["Password"]) or $_SESSION["Password"] != Password)) { dl_error("密码错误", "密码错误或超时,请返回首页重新验证密码。"); // 密码错误 } elseif ($_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"])) { + if (isset($_POST["fs_id"]) && isset($_POST["time"]) && isset($_POST["sign"]) && isset($_POST["randsk"]) && isset($_POST["share_id"]) && isset($_POST["uk"]) && isset($_POST["bdstoken"]) && isset($_POST["filesize"])) { $fs_id = $_POST["fs_id"]; $timestamp = $_POST["time"]; $sign = $_POST["sign"]; $randsk = $_POST["randsk"]; $share_id = $_POST["share_id"]; $uk = $_POST["uk"]; - $json4 = getDlink($fs_id, $timestamp, $sign, $randsk, $share_id, $uk); + $bdstoken=$_POST["bdstoken"]; + $filesize=$_POST["filesize"]; + $nouarealLink="";//重置 + if((int)$filesize<=52428800){ + $json5 = getDlink($fs_id, $timestamp, $sign, $randsk, $share_id, $uk ,$bdstoken,true); + if ($json5["errno"] == 0) { + $nouadlink = $json5["list"][0]["dlink"]; + //开始获取真实链接 + $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=' . BDUSS . ';'); + $getRealLink = head($nouadlink, $headerArray); // 禁止重定向 + $getRealLink = strstr($getRealLink, "Location"); + $getRealLink = substr($getRealLink, 10); + $nouarealLink = getSubstr($getRealLink, "http://", "\r\n"); // 删除 http:// + } + } + $json4 = getDlink($fs_id, $timestamp, $sign, $randsk, $share_id, $uk ,$bdstoken,false); + if ($json4["errno"] == 0) { $dlink = $json4["list"][0]["dlink"]; //获取文件相关信息 @@ -255,6 +273,7 @@ $getRealLink = strstr($getRealLink, "Location"); $getRealLink = substr($getRealLink, 10); $realLink = getSubstr($getRealLink, "http://", "\r\n"); // 删除 http:// + // 1. 使用 dlink 下载文件 2. dlink 有效期为8小时 3. 必需要设置 User-Agent 字段 4. dlink 存在 HTTP 302 跳转 if ($realLink == "") echo '