蓝奏云文件解析PHP接口代码

原创软件 · 16 天前 · 89 人浏览
蓝奏云文件解析PHP接口代码

说明

搭建好PHP文件之后,可以根据分享链接,请求便可获取蓝奏云文件直链。以便于文件更新,软件下载等。

截图

2025-06-12_16-45-40.png

使用说明

如分享链接为:https://400.lanzout.com/imUKs2yg5fpi
那么需要获取链接值:imUKs2yg5fpi,进行请求便可直接获取短链。
如:https://xxx.com/lanzou.php?share=imUKs2yg5fpi
需要注意的一点,我提供的PHP代码,我所使用的短链为:https://400.lanzout.com,使用的话,请改为自己的蓝奏个性域名。

蓝奏云解析接口代码

<?php
function getLanzouyunDirectLink($url)
{
    $cookieFile = tempnam(sys_get_temp_dir(), 'lz_cookie_');
    $userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edg/137.0.0.0';
    $parts = parse_url($url);
    if (!isset($parts['scheme'], $parts['host'])) {
        return json_encode(['code' => 1, 'msg' => '无效的 URL']);
    }
    $port = isset($parts['port']) ? ':' . $parts['port'] : '';
    $baseUrl = $parts['scheme'] . '://' . $parts['host'] . $port . '/';

    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_COOKIEJAR => $cookieFile,
        CURLOPT_COOKIEFILE => $cookieFile,
        CURLOPT_USERAGENT => $userAgent,
    ]);
    $html1 = curl_exec($ch);
    if ($html1 === false) {
        return json_encode(['code' => 1, 'msg' => '请求初始页面失败:' . curl_error($ch)]);
    }
    if (!preg_match('/<iframe\b[^>]*\bsrc="([^"]+)"/i', $html1, $m)) {
        return json_encode(['code' => 1, 'msg' => '未能找到 iframe src 节点信息']);
    }
    $iframeSrc = $m[1];
    $iframeUrl = preg_match('#^https?://#i', $iframeSrc) ? $iframeSrc : $baseUrl . ltrim($iframeSrc, '/');

    curl_setopt_array($ch, [
        CURLOPT_URL => $iframeUrl,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => true,
    ]);
    $html2 = curl_exec($ch);
    if ($html2 === false) {
        return json_encode(['code' => 1, 'msg' => '请求 iframe 页面失败:' . curl_error($ch)]);
    }
    preg_match("/wp_sign\s*=\s*'([^']+)'/i", $html2, $m1);
    preg_match("/ajaxdata\s*=\s*'([^']+)'/i", $html2, $m2);
    preg_match_all('/\/ajaxm\.php\?file=(\d+)/i', $html2, $m3);
    $wpSign = isset($m1[1]) ? $m1[1] : '';
    $ajaxData = isset($m2[1]) ? $m2[1] : '';
    $fileId = !empty($m3[1]) ? end($m3[1]) : '';

    if ($wpSign === '' || $ajaxData === '' || $fileId === '') {
        return json_encode(['code' => 1, 'msg' => '关键数据获取失败']);
    }

    $postUrl = $baseUrl . "ajaxm.php?file={$fileId}";
    $postData = http_build_query([
        'action' => 'downprocess',
        'websignkey' => $ajaxData,
        'signs' => $ajaxData,
        'sign' => $wpSign,
        'websign' => '',
        'kd' => '1',
        'ves' => '1',
    ]);
    curl_setopt_array($ch, [
        CURLOPT_URL => $postUrl,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => $postData,
        CURLOPT_HTTPHEADER => [
            'Content-Type: application/x-www-form-urlencoded',
            'Referer: ' . $baseUrl,
        ],
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => false,
    ]);
    $jsonResp = curl_exec($ch);
    if ($jsonResp === false) {
        return json_encode(['code' => 1, 'msg' => 'POST 请求失败:' . curl_error($ch)]);
    }
    preg_match('/"dom":"([^"]+)"/', $jsonResp, $m4);
    preg_match('/"url":"([^"]+)"/', $jsonResp, $m5);
    $domValue = isset($m4[1]) ? str_replace('\\/', '/', $m4[1]) : '';
    $urlValue = isset($m5[1]) ? $m5[1] : '';
    if ($domValue === '' || $urlValue === '') {
        return json_encode(['code' => 1, 'msg' => '未能解析直链信息']);
    }

    $fileUrl = $domValue . '/file/' . $urlValue;
    curl_setopt_array($ch, [
        CURLOPT_URL => $fileUrl,
        CURLOPT_NOBODY => true,
        CURLOPT_HEADER => true,
        CURLOPT_FOLLOWLOCATION => false,
        CURLOPT_HTTPHEADER => [
            'Accept: text/html, application/xhtml+xml, */*',
            'Content-Type: application/x-www-form-urlencoded',
            'Referer: ' . $baseUrl,
            'Accept-Encoding: gbk, GB2312',
            'Accept-Language: zh-cn',
        ],
    ]);
    $head = curl_exec($ch);
    curl_close($ch);
    @unlink($cookieFile);
    if ($head === false) {
        return json_encode(['code' => 1, 'msg' => '请求直链过渡页失败:' . curl_error($ch)]);
    }
    if (preg_match('/Location:\s*(.+)\r\n/i', $head, $m6)) {
        return json_encode(['code' => 0, 'url' => trim($m6[1])]);
    } else {
        return json_encode(['code' => 1, 'msg' => '未能获取到重定向 Location']);
    }
}

function buildLanzouUrl($share) {
    return preg_match('#^https?://#i', $share) ? $share : 'https://400.lanzout.com/' . $share;
}

$share = isset($_GET['share']) ? trim($_GET['share']) : '';
if ($share === '') {
    echo json_encode(['code' => 1, 'msg' => '缺少 share 参数']);
    exit;
}
$url = buildLanzouUrl($share);
echo getLanzouyunDirectLink($url);