目录

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 发起请求
}