mirror of
https://github.com/qaiu/netdisk-fast-download.git
synced 2025-12-16 12:23:03 +00:00
🚀 核心功能 - 新增完整的客户端下载链接生成器系统 - 支持ARIA2、Motrix、比特彗星、迅雷、wget、cURL、IDM、FDM、PowerShell等8种客户端 - 自动处理防盗链参数(User-Agent、Referer、Cookie等) - 提供可扩展的生成器架构,支持自定义客户端 🔧 技术实现 - ClientLinkGeneratorFactory: 工厂模式管理生成器 - DownloadLinkMeta: 元数据存储下载信息 - ClientLinkUtils: 便捷工具类 - 线程安全的ConcurrentHashMap设计 🌐 前端集成 - 新增ClientLinks.vue界面,支持客户端链接展示 - Element Plus图标系统,混合图标显示 - 客户端检测逻辑优化,避免自动打开外部应用 - 移动端和PC端环境判断 📚 文档完善 - 完整的CLIENT_LINK_GENERATOR_GUIDE.md使用指南 - API文档和测试用例 - 输出示例和最佳实践 从单纯的网盘解析工具升级为完整的下载解决方案生态
9.3 KiB
9.3 KiB
客户端下载链接生成器使用指南
概述
客户端下载链接生成器是 parser 模块的新功能,用于将解析得到的直链转换为各种下载客户端可识别的格式,包括 curl、wget、aria2、IDM、迅雷、比特彗星、Motrix、FDM 等主流下载工具。
核心特性
- 多客户端支持:支持 8 种主流下载客户端格式
- 防盗链处理:自动处理请求头、Referer 等防盗链参数
- 可扩展设计:支持注册自定义生成器
- 元数据存储:通过
ShareLinkInfo.otherParam存储下载元数据 - 线程安全:工厂类使用 ConcurrentHashMap 保证线程安全
支持的客户端类型
| 客户端类型 | 代码 | 说明 | 输出格式 |
|---|---|---|---|
| Aria2 | ARIA2 |
命令行/RPC | aria2c 命令 |
| Motrix | MOTRIX |
跨平台下载工具 | JSON 格式 |
| 比特彗星 | BITCOMET |
BT 下载工具 | bitcomet:// 协议链接 |
| 迅雷 | THUNDER |
国内主流下载工具 | thunder:// 协议链接 |
| wget | WGET |
命令行工具 | wget 命令 |
| cURL | CURL |
命令行工具 | curl 命令 |
| IDM | IDM |
Windows 下载管理器 | idm:// 协议链接 |
| FDM | FDM |
Free Download Manager | 文本格式 |
| PowerShell | POWERSHELL |
Windows PowerShell | PowerShell 命令 |
快速开始
1. 基本使用
// 解析分享链接
IPanTool tool = ParserCreate.fromShareUrl("https://example.com/share/abc123")
.createTool();
String directLink = tool.parseSync();
// 获取 ShareLinkInfo
ShareLinkInfo info = tool.getShareLinkInfo();
// 生成所有类型的客户端链接
Map<ClientLinkType, String> clientLinks = ClientLinkGeneratorFactory.generateAll(info);
// 使用生成的链接
String curlCommand = clientLinks.get(ClientLinkType.CURL);
String thunderLink = clientLinks.get(ClientLinkType.THUNDER);
2. 使用新的便捷方法(推荐)
// 解析分享链接并自动生成客户端链接
IPanTool tool = ParserCreate.fromShareUrl("https://example.com/share/abc123")
.createTool();
// 一步完成解析和客户端链接生成
Map<ClientLinkType, String> clientLinks = tool.parseWithClientLinksSync();
// 使用生成的链接
String curlCommand = clientLinks.get(ClientLinkType.CURL);
String thunderLink = clientLinks.get(ClientLinkType.THUNDER);
3. 异步方式
// 异步解析并生成客户端链接
tool.parseWithClientLinks()
.onSuccess(clientLinks -> {
log.info("生成的客户端链接: {}", clientLinks);
})
.onFailure(error -> {
log.error("解析失败", error);
});
4. 生成特定类型的链接
// 生成 curl 命令
String curlCommand = ClientLinkGeneratorFactory.generate(info, ClientLinkType.CURL);
// 生成迅雷链接
String thunderLink = ClientLinkGeneratorFactory.generate(info, ClientLinkType.THUNDER);
// 生成 aria2 命令
String aria2Command = ClientLinkGeneratorFactory.generate(info, ClientLinkType.ARIA2);
5. 使用便捷工具类
// 使用 ClientLinkUtils 工具类
String curlCommand = ClientLinkUtils.generateCurlCommand(info);
String wgetCommand = ClientLinkUtils.generateWgetCommand(info);
String thunderLink = ClientLinkUtils.generateThunderLink(info);
String powershellCommand = ClientLinkUtils.generatePowerShellCommand(info);
// 检查是否有有效的下载元数据
boolean hasValidMeta = ClientLinkUtils.hasValidDownloadMeta(info);
输出示例
PowerShell 命令示例
$session = New-Object Microsoft.PowerShell.Commands.WebRequestSession
$session.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
Invoke-WebRequest `
-UseBasicParsing `
-Uri "https://example.com/file.zip" `
-WebSession $session `
-Headers @{`
"Cookie"="session=abc123"`
`
"Accept"="text/html,application/xhtml+xml"`
`
"User-Agent"="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"`
`
"Referer"="https://example.com/share/test"`
} `
-OutFile "test-file.zip"
cURL 命令示例
curl \
-L \
-H \
"Cookie: session=abc123" \
-H \
"User-Agent: Mozilla/5.0 (Test Browser)" \
-H \
"Referer: https://example.com/share/test" \
-o \
"test-file.zip" \
"https://example.com/file.zip"
迅雷链接示例
thunder://QUFodHRwczovL2V4YW1wbGUuY29tL2ZpbGUuemlwWlo=
Aria2 命令示例
aria2c \
--header="Cookie: session=abc123" \
--header="User-Agent: Mozilla/5.0 (Test Browser)" \
--header="Referer: https://example.com/share/test" \
--out="test-file.zip" \
--continue \
--max-tries=3 \
--retry-wait=5 \
"https://example.com/file.zip"
解析器集成
1. 使用 completeWithMeta 方法
在解析器实现中,使用 PanBase 提供的 completeWithMeta 方法来存储下载元数据:
public class MyPanTool extends PanBase {
@Override
public Future<String> parse() {
// ... 解析逻辑 ...
// 获取下载链接
String downloadUrl = "https://example.com/file.zip";
// 准备请求头
Map<String, String> headers = new HashMap<>();
headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36");
headers.put("Referer", shareLinkInfo.getShareUrl());
headers.put("Cookie", "session=abc123");
// 使用 completeWithMeta 存储元数据
completeWithMeta(downloadUrl, headers);
return future();
}
}
2. 使用 MultiMap 版本
如果使用 Vert.x 的 MultiMap:
MultiMap headers = MultiMap.caseInsensitiveMultiMap();
headers.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36");
headers.set("Referer", shareLinkInfo.getShareUrl());
// 使用 MultiMap 版本
completeWithMeta(downloadUrl, headers);
输出示例
curl 命令
curl -L "https://example.com/file.zip" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" \
-H "Referer: https://example.com/share/abc123" \
-H "Cookie: session=abc123" \
-o "file.zip"
wget 命令
wget --header="User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" \
--header="Referer: https://example.com/share/abc123" \
--header="Cookie: session=abc123" \
-O "file.zip" \
"https://example.com/file.zip"
aria2 命令
aria2c --header="User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" \
--header="Referer: https://example.com/share/abc123" \
--header="Cookie: session=abc123" \
--out="file.zip" \
--continue \
--max-tries=3 \
--retry-wait=5 \
"https://example.com/file.zip"
迅雷链接
thunder://QUFodHRwczovL2V4YW1wbGUuY29tL2ZpbGUuemlwWlo=
IDM 链接
idm:///?url=aHR0cHM6Ly9leGFtcGxlLmNvbS9maWxlLnppcA==&header=UmVmZXJlcjogaHR0cHM6Ly9leGFtcGxlLmNvbS9zaGFyZS9hYmMxMjMK
扩展开发
1. 自定义生成器
实现 ClientLinkGenerator 接口:
public class MyCustomGenerator implements ClientLinkGenerator {
@Override
public String generate(DownloadLinkMeta meta) {
// 自定义生成逻辑
return "myapp://download?url=" + meta.getUrl();
}
@Override
public ClientLinkType getType() {
return ClientLinkType.CURL; // 或者定义新的类型
}
}
2. 注册自定义生成器
// 注册自定义生成器
ClientLinkGeneratorFactory.register(new MyCustomGenerator());
// 使用自定义生成器
String customLink = ClientLinkGeneratorFactory.generate(info, ClientLinkType.CURL);
注意事项
- 防盗链处理:不同网盘的防盗链策略不同,需要在元数据中完整保存所需的 headers
- URL 编码:生成客户端链接时注意 URL 和参数的正确编码(Base64、URLEncode 等)
- 兼容性:确保生成的命令/协议在主流客户端中可用
- 可选特性:元数据存储和客户端链接生成均为可选,不影响现有解析器功能
- 线程安全:工厂类使用 ConcurrentHashMap 存储生成器,支持多线程环境
API 参考
IPanTool 接口新增方法
parseWithClientLinks()- 解析文件并生成客户端下载链接(异步)parseWithClientLinksSync()- 解析文件并生成客户端下载链接(同步)getShareLinkInfo()- 获取 ShareLinkInfo 对象
ClientLinkGeneratorFactory
generateAll(ShareLinkInfo info)- 生成所有类型的客户端链接generate(ShareLinkInfo info, ClientLinkType type)- 生成指定类型的链接register(ClientLinkGenerator generator)- 注册自定义生成器unregister(ClientLinkType type)- 注销生成器isRegistered(ClientLinkType type)- 检查是否已注册
ClientLinkUtils
generateAllClientLinks(ShareLinkInfo info)- 生成所有客户端链接generateCurlCommand(ShareLinkInfo info)- 生成 curl 命令generateWgetCommand(ShareLinkInfo info)- 生成 wget 命令generateThunderLink(ShareLinkInfo info)- 生成迅雷链接generatePowerShellCommand(ShareLinkInfo info)- 生成 PowerShell 命令hasValidDownloadMeta(ShareLinkInfo info)- 检查元数据有效性
PanBase
completeWithMeta(String url, Map<String, String> headers)- 完成解析并存储元数据completeWithMeta(String url, MultiMap headers)- 完成解析并存储元数据(MultiMap版本)