fix: 更新 DownloadFile 函数以解析 URL,增强 TLS 配置并改进重试逻辑

This commit is contained in:
lixiangwuxian 2025-04-10 02:06:46 +08:00
parent fda4cca833
commit 5b63594110

View File

@ -65,21 +65,40 @@ func normalizeURL(rawURL string) string {
}
// DownloadFile 下载文件到指定目录,返回带有正确扩展名的完整文件路径
func DownloadFile(url string, dirPath string) (filepath string, err error) {
// 创建自定义的HTTP客户端
client := &http.Client{
Transport: &http.Transport{
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true,
func DownloadFile(urlStr string, dirPath string) (filepath string, err error) {
// 解析URL获取域名
parsedURL, err := url.Parse(urlStr)
if err != nil {
return "", fmt.Errorf("URL解析失败: %v", err)
}
// 创建基础传输配置
transport := &http.Transport{
ForceAttemptHTTP2: true,
}
// 如果是腾讯的特定域名使用特殊的TLS配置
if strings.HasSuffix(parsedURL.Host, ".qq.com.cn") {
transport.TLSClientConfig = &tls.Config{
MinVersion: tls.VersionTLS12,
MaxVersion: tls.VersionTLS12,
CipherSuites: []uint16{
tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
},
},
}
transport.ForceAttemptHTTP2 = false
}
// 创建HTTP客户端
client := &http.Client{
Transport: transport,
}
// 发送 HTTP GET 请求
var resp *http.Response
var maxRetry = 100
var retry = 0
for resp, err = client.Get(url); err != nil && retry < maxRetry; resp, err = client.Get(url) {
for resp, err = client.Get(urlStr); err != nil && retry < maxRetry; resp, err = client.Get(urlStr) {
fmt.Printf("下载失败,正在重试... 错误: %v\n", err)
retry++
}