春江暮客

春江暮客的个人学习分享网站

thunder 迅雷下载地址真实地址解析:Python 与 JavaScript 转换示例

2019-05-17 杂谈
thunder 迅雷下载地址真实地址解析:Python 与 JavaScript 转换示例

很多人会遇到 thunder:// 开头的迅雷链接。它看起来不像普通的 httphttps 地址,但本质上通常只是把原始下载地址做了一层固定规则的包装。

如果你只是想知道它的格式是什么,或者需要在代码里做编码与解码,这篇文章就足够了。这里不讨论下载可用性问题,只解释普通 URL 和 thunder:// 链接之间的转换规则。

例如我随便给一个下载地址是
https://www.bobobk.com/favicon.ico

开始前先记住 thunder 链接规则

最常见的 thunder:// 链接格式可以简单理解为:

  1. 在原始 URL 前面加上 AA
  2. 在原始 URL 后面加上 ZZ
  3. 将整个字符串做 Base64 编码
  4. 最前面再加上 thunder://

所以它并不是一种完全不同的下载协议,而更像一种固定格式的字符串封装。

1. 普通地址转换为迅雷地址

1.1 在原地址前面加 AA,后面加 ZZ

地址变为:

AAhttps://www.bobobk.com/favicon.icoZZ

1.2 对这个地址做 Base64 编码

QUFodHRwczovL3d3dy5ib2JvYmsuY29tL2Zhdmljb24uaWNvWlo=

1.3 最前面加上 thunder://

thunder://QUFodHRwczovL3d3dy5ib2JvYmsuY29tL2Zhdmljb24uaWNvWlo=

转换代码

import base64


def convert_to_thunder(url: str) -> str:
        wrapped = "AA" + url + "ZZ"
        encoded = base64.b64encode(wrapped.encode("utf-8")).decode("utf-8")
        return "thunder://" + encoded


normal_url = 'https://www.bobobk.com/favicon.ico'
print(convert_to_thunder(normal_url))

《thunder迅雷下载地址真实地址解析》

2. 迅雷地址转换为普通地址

2.1 去掉前面的 thunder://

地址变为
QUFodHRwczovL3d3dy5ib2JvYmsuY29tL2Zhdmljb24uaWNvWlo=

2.2 对这段内容做 Base64 解码

AAhttps://www.bobobk.com/favicon.icoZZ

2.3 再去掉前后的 AAZZ

https://www.bobobk.com/favicon.ico

转换代码

import base64


def convert_thunder(thunder_url: str) -> str:
        encoded = thunder_url.strip().split("//", 1)[1]
        decoded = base64.b64decode(encoded).decode("utf-8")
        return decoded[2:-2]


thunder = 'thunder://QUFodHRwczovL3d3dy5ib2JvYmsuY29tL2Zhdmljb24uaWNvWlo='
print(convert_thunder(thunder))

javascript 代码

如果你只是想在浏览器里临时转换,JavaScript 也可以直接完成。

function decodeThunder(thunderUrl) {
    const encoded = thunderUrl.replace(/^thunder:\/\//, "");
    const decoded = window.atob(encoded);
    return decoded.substring(2, decoded.length - 2);
}

function encodeThunder(normalUrl) {
    const encoded = window.btoa("AA" + normalUrl + "ZZ");
    return "thunder://" + encoded;
}

document.querySelector('#decoded').innerHTML = decodeThunder(
    document.querySelector('#de_thunder').value
);

document.querySelector('#encoded').innerHTML = encodeThunder(
    document.querySelector('#en_thunder').value
);

使用时的两个注意点

  1. 不是所有 thunder:// 链接都一定对应可直接访问的原始地址,关键还是看原始资源本身是否可用
  2. 如果要在代码里批量处理,最好先做异常捕获,避免遇到格式错误的 Base64 字符串时直接报错

总结

本文说明了 thunder:// 链接最常见的转换规则:原始 URL 前后分别加上 AAZZ,再做 Base64 编码,最后补上 thunder:// 前缀。

如果你只是想在代码里实现一个简单的 thunder 链接转换器,用 Python 或 JavaScript 都很容易完成。大家也可以直接在 春江暮客迅雷加密与解析 使用现成页面。

友情链接

其它