go 自定义 http client
目录
默认情况下,http client 用的是默认的,大多数情况下都是够用的
client := http.DefaultClient // 默认的 client
http.Get("https://xxx") // 内部代码用的就是默认的 client
但有时候需要对 client 做一些配置:
-
请求超时
-
连接数配置
-
最大连接数
-
自定义代理
-
…
这时候就需要自定义一个 http client
func main() {
var httpClient = &http.Client{
Timeout: 30 * time.Second, // 全局超时(包含连接、发送请求、读取响应)
Transport: &http.Transport{
MaxIdleConns: 800, // 最大空闲连接数
MaxIdleConnsPerHost: 800, // 每个主机的最大空闲连接数
MaxConnsPerHost: 100, // 每个主机的最大连接数
IdleConnTimeout: 120 * time.Second, // 空闲连接超时时间
// 连接控制
DialContext: (&net.Dialer{
Timeout: 30 * time.Second, // 连接超时
KeepAlive: 30 * time.Second, // 保持活动连接时间
}).DialContext,
// 其他高级配置
DisableKeepAlives: false, // 是否禁用长连接
DisableCompression: false, // 是否禁用压缩
ForceAttemptHTTP2: true, // 是否强制尝试 HTTP/2
ExpectContinueTimeout: 1 * time.Second, // 100-continue 等待超时
},
}
httpClient.Get("https://xxx") // 使用自定义 http client 发起请求
}