diff --git a/util/url.go b/util/url.go index 2a9ccd7..01d96c1 100644 --- a/util/url.go +++ b/util/url.go @@ -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++ }