From 5b635941103d6df277cb3c92c071e088a9238d45 Mon Sep 17 00:00:00 2001 From: lixiangwuxian Date: Thu, 10 Apr 2025 02:06:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=9B=B4=E6=96=B0=20DownloadFile=20?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E4=BB=A5=E8=A7=A3=E6=9E=90=20URL=EF=BC=8C?= =?UTF-8?q?=E5=A2=9E=E5=BC=BA=20TLS=20=E9=85=8D=E7=BD=AE=E5=B9=B6=E6=94=B9?= =?UTF-8?q?=E8=BF=9B=E9=87=8D=E8=AF=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- util/url.go | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) 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++ }