package main import ( "net" "net/http" "os" "time" ) var ( // 全局HTTP客户端 - 用于代理请求(长超时) globalHTTPClient *http.Client // 搜索HTTP客户端 - 用于API请求(短超时) searchHTTPClient *http.Client ) // initHTTPClients 初始化HTTP客户端 func initHTTPClients() { cfg := GetConfig() if p := cfg.Access.Proxy; p != "" { os.Setenv("HTTP_PROXY", p) os.Setenv("HTTPS_PROXY", p) } // 代理客户端配置 - 适用于大文件传输 globalHTTPClient = &http.Client{ Transport: &http.Transport{ Proxy: http.ProxyFromEnvironment, DialContext: (&net.Dialer{ Timeout: 30 * time.Second, KeepAlive: 30 * time.Second, }).DialContext, MaxIdleConns: 1000, MaxIdleConnsPerHost: 1000, IdleConnTimeout: 90 * time.Second, TLSHandshakeTimeout: 10 * time.Second, ExpectContinueTimeout: 1 * time.Second, ResponseHeaderTimeout: 300 * time.Second, }, } // 搜索客户端配置 - 适用于API调用 searchHTTPClient = &http.Client{ Timeout: 10 * time.Second, Transport: &http.Transport{ Proxy: http.ProxyFromEnvironment, DialContext: (&net.Dialer{ Timeout: 5 * time.Second, KeepAlive: 30 * time.Second, }).DialContext, MaxIdleConns: 100, MaxIdleConnsPerHost: 10, IdleConnTimeout: 90 * time.Second, TLSHandshakeTimeout: 5 * time.Second, DisableCompression: false, }, } } // GetGlobalHTTPClient 获取全局HTTP客户端(用于代理) func GetGlobalHTTPClient() *http.Client { return globalHTTPClient } // GetSearchHTTPClient 获取搜索HTTP客户端(用于API调用) func GetSearchHTTPClient() *http.Client { return searchHTTPClient }