实现123盘主备域名下载

This commit is contained in:
2025-06-22 23:30:31 +08:00
parent 787d3b3b57
commit b46867e776

196
Form1.cs
View File

@@ -43,8 +43,10 @@ namespace CheckDownload
private const string OneDriveAuthKey = "6SwdpWdSJuJRSh";
// 123盘UID
private const string OneDriveUid = "1826795402";
// 123盘链接地址
private const string OneDriveLink = "http://123.54sxh.cn/1826795402/KeyAuth";
// 123盘主域名链接地址
private const string OneDriveLink = "http://vip.123pan.cn/1826795402/KeyAuth";
// 123盘备用域名链接地址
private const string OneDriveBackupLink = "http://vip.123yx.com/1826795402/KeyAuth";
// 123盘鉴权有效时间
private const int OneDriveAuthTimeout = 600; // 10分钟
@@ -468,7 +470,98 @@ namespace CheckDownload
}
/// <summary>
/// 从123盘下载单个文件
/// 从123盘下载在线MD5文件主域名+备用域名)
/// </summary>
/// <param name="baseUrl">123盘基础链接地址</param>
/// <param name="fileName">要下载的文件名</param>
/// <param name="localPath">本地保存路径</param>
/// <returns>下载是否成功</returns>
private async Task<bool> DownloadFromOneDrive(string baseUrl, string fileName, string localPath)
{
// 1. 首先尝试主域名
try
{
UpdateStatus($"正在从123盘下载: {fileName}");
// 生成123盘鉴权URL主域名
string authUrl = GenerateAuthUrl(OneDriveLink, fileName);
UpdateStatus($"使用主域名下载文件...");
// 创建HTTP请求
var request = new HttpRequestMessage(HttpMethod.Get, authUrl);
request.Headers.Add("User-Agent", "CheckDownload/1.0");
// 发送请求并获取响应
var response = await _httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
// 读取文件数据
byte[] fileData = await response.Content.ReadAsByteArrayAsync();
// 确保本地目录存在
string localDir = Path.GetDirectoryName(localPath);
if (!Directory.Exists(localDir))
{
Directory.CreateDirectory(localDir);
}
// 保存文件到本地
File.WriteAllBytes(localPath, fileData);
UpdateStatus($"123盘主域名下载成功: {fileName}");
return true;
}
catch (Exception ex)
{
UpdateStatus($"123盘主域名下载失败尝试备用域名: {fileName}");
Debug.WriteLine($"123盘主域名下载异常: {ex}");
}
// 2. 如果主域名失败,尝试备用域名
try
{
UpdateStatus($"正在从123盘备用域名下载: {fileName}");
// 生成123盘鉴权URL备用域名
string authUrl = GenerateAuthUrl(OneDriveBackupLink, fileName);
UpdateStatus($"使用备用域名下载文件...");
// 创建HTTP请求
var request = new HttpRequestMessage(HttpMethod.Get, authUrl);
request.Headers.Add("User-Agent", "CheckDownload/1.0");
// 发送请求并获取响应
var response = await _httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
// 读取文件数据
byte[] fileData = await response.Content.ReadAsByteArrayAsync();
// 确保本地目录存在
string localDir = Path.GetDirectoryName(localPath);
if (!Directory.Exists(localDir))
{
Directory.CreateDirectory(localDir);
}
// 保存文件到本地
File.WriteAllBytes(localPath, fileData);
UpdateStatus($"123盘备用域名下载成功: {fileName}");
return true;
}
catch (Exception ex)
{
UpdateStatus($"123盘备用域名下载失败: {fileName} - {ex.Message}");
Debug.WriteLine($"123盘备用域名下载异常: {ex}");
return false;
}
}
/// <summary>
/// 从123盘下载单个文件主域名+备用域名)
/// </summary>
/// <param name="filePath">文件相对路径</param>
/// <param name="expectedMd5">期望的MD5值</param>
@@ -476,12 +569,13 @@ namespace CheckDownload
/// <returns>下载是否成功</returns>
private async Task<bool> DownloadFileFromOneDrive(string filePath, string expectedMd5, string localPath)
{
// 在123盘中文件是通过MD5值存储的路径为 /File/{MD5值}
string fileName = $"File/{expectedMd5}";
// 1. 首先尝试主域名
try
{
// 123盘文件是通过MD5值存储的路径为 /File/{MD5值}
string fileName = $"File/{expectedMd5}";
// 生成123盘鉴权URL
// 生成123盘鉴权URL主域名
string authUrl = GenerateAuthUrl(OneDriveLink, fileName);
// 创建HTTP请求
@@ -509,7 +603,41 @@ namespace CheckDownload
}
catch (Exception ex)
{
Debug.WriteLine($"123盘下载文件失败: {filePath} - {ex.Message}");
Debug.WriteLine($"123盘主域名下载文件失败: {filePath} - {ex.Message}");
}
// 2. 如果主域名失败,尝试备用域名
try
{
// 生成123盘鉴权URL备用域名
string authUrl = GenerateAuthUrl(OneDriveBackupLink, fileName);
// 创建HTTP请求
var request = new HttpRequestMessage(HttpMethod.Get, authUrl);
request.Headers.Add("User-Agent", "CheckDownload/1.0");
// 发送请求并获取响应
var response = await _httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
// 读取文件数据
byte[] fileData = await response.Content.ReadAsByteArrayAsync();
// 确保本地目录存在
string localDir = Path.GetDirectoryName(localPath);
if (!Directory.Exists(localDir))
{
Directory.CreateDirectory(localDir);
}
// 保存文件到本地
File.WriteAllBytes(localPath, fileData);
return true;
}
catch (Exception ex)
{
Debug.WriteLine($"123盘备用域名下载文件失败: {filePath} - {ex.Message}");
return false;
}
}
@@ -1107,7 +1235,7 @@ namespace CheckDownload
{
// 1. 首先尝试从123盘下载
UpdateStatus("尝试从123盘下载MD5文件...");
if (await DownloadFromOneDrive(OneDriveLink, fileName, localPath))
if (await DownloadFromOneDrive(fileName, fileName, localPath))
{
return true;
}
@@ -1123,55 +1251,5 @@ namespace CheckDownload
return false;
}
}
/// <summary>
/// 从123盘下载在线MD5文件
/// </summary>
/// <param name="baseUrl">123盘基础链接地址</param>
/// <param name="fileName">要下载的文件名</param>
/// <param name="localPath">本地保存路径</param>
/// <returns>下载是否成功</returns>
private async Task<bool> DownloadFromOneDrive(string baseUrl, string fileName, string localPath)
{
try
{
UpdateStatus($"正在从123盘下载: {fileName}");
// 生成123盘鉴权URL
string authUrl = GenerateAuthUrl(baseUrl, fileName);
UpdateStatus($"使用鉴权URL下载文件...");
// 创建HTTP请求
var request = new HttpRequestMessage(HttpMethod.Get, authUrl);
request.Headers.Add("User-Agent", "CheckDownload/1.0");
// 发送请求并获取响应
var response = await _httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
// 读取文件数据
byte[] fileData = await response.Content.ReadAsByteArrayAsync();
// 确保本地目录存在
string localDir = Path.GetDirectoryName(localPath);
if (!Directory.Exists(localDir))
{
Directory.CreateDirectory(localDir);
}
// 保存文件到本地
File.WriteAllBytes(localPath, fileData);
UpdateStatus($"123盘下载成功: {fileName}");
return true;
}
catch (Exception ex)
{
UpdateStatus($"123盘下载失败: {fileName} - {ex.Message}");
Debug.WriteLine($"123盘下载异常: {ex}");
return false;
}
}
}
}