说明
搭建好PHP文件之后,可以根据分享链接,请求便可获取蓝奏云文件直链。以便于文件更新,软件下载等。
截图
使用说明
如分享链接为: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);