博客 / Others/ 使用PHP如何将普通url下载地址与迅雷下载地址thunder://相互转换

使用PHP如何将普通url下载地址与迅雷下载地址thunder://相互转换

普通 URL 转迅雷地址 (thunder://)

将普通 HTTP/HTTPS/FTP 等下载链接转换为迅雷专用链接,核心原理是在原链接前后添加特定标识符("AA" 和 "ZZ"),然后进行 Base64 编码,最后加上 "thunder://" 前缀。

<?php
function ThunderEncode($url) {
    // 迅雷链接的固定前缀和尾缀
    $thunderPrefix = "AA";
    $thunderSuffix = "ZZ";
    $thunderTitle = "thunder://";
    // 拼接:AA + 原始URL + ZZ,然后进行Base64编码,最后加上迅雷协议头
    $thunderUrl = $thunderTitle . base64_encode($thunderPrefix . $url . $thunderSuffix);
    return $thunderUrl;
}
?>

使用示例:

<?php
echo ThunderEncode("https://example.com/file.zip");
// 输出类似:thunder://QUFodHRwczovL2V4YW1wbGUuY29tL2ZpbGUuemlwWlo=
?>

迅雷地址 (thunder://) 转普通 URL

将迅雷专用链接还原为原始下载地址,过程是上述编码的逆操作:去除协议头、Base64 解码、去除标识符。

<?php
function ThunderDecode($thunderUrl) {
    $thunderPrefix = "AA";
    $thunderSuffix = "ZZ";
    $thunderTitle = "thunder://";
    // 1. 去除字符串两端的空白字符
    $url = trim($thunderUrl);
    // 2. 去除 "thunder://" 协议头(共10个字符)
    $url = substr($url, 10);
    // 3. 对剩余部分进行Base64解码
    $url = base64_decode($url);
    // 4. 去除解码后字符串开头的 "AA" (2字符) 和结尾的 "ZZ" (2字符)
    $url = substr($url, 2, -2);
    return $url;
}
?>

使用示例:

<?php
echo ThunderDecode("thunder://QUFodHRwczovL2V4YW1wbGUuY29tL2ZpbGUuemlwWlo=");
// 输出:https://example.com/file.zip
?>

注意事项与改进建议

  • 错误处理: 上述基础函数缺乏错误处理。在实际应用中,应添加对输入格式、Base64 解码有效性以及字符串长度的检查。
  • 编码问题: 确保你的 PHP 环境字符编码设置正确,避免处理包含非 ASCII 字符的 URL 时出现问题。
  • 安全性: 此转换仅用于地址格式处理,不涉及下载行为本身。请确保转换的 URL 来源可信。
  • 函数优化: 可以将固定的前缀、后缀和协议头定义为类常量或配置文件,提高代码可维护性。

技术原理说明: 迅雷的 thunder:// 协议是一种私有协议,通过在原始地址前后添加 "AA" 和 "ZZ" 作为标记,然后进行 Base64 编码生成。这种方式本身不提供加密或安全性,只是一种地址格式的封装,便于迅雷客户端识别和接管下载任务。

发表评论

您的邮箱不会公开。必填项已用 * 标注。