var (
httpClient *http.Client
once sync.Once
)
func CreateHTTPClient() *http.Client {
// 使用单例创建client
once.Do(func() {
httpClient = &http.Client{
Transport: &http.Transport{
DialContext: (&net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
}).DialContext,
MaxIdleConns: 50000, // 最大连接数,默认0无穷大
MaxIdleConnsPerHost: 50000, // 对每个host的最大连接数量(MaxIdleConnsPerHost<=MaxIdleConns)
IdleConnTimeout: 30 * time.Second, // 多长时间未使用自动关闭连接
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
TLSHandshakeTimeout:3*time.Second,
ExpectContinueTimeout: 1 * time.Second,
},
Timeout:3 *time.Millisecond,
}
})
return httpClient
}
func HttpsPost(url string,stu []byte,body *[]byte)[]byte{
client := CreateHTTPClient()
reader := bytes.NewReader(stu)
request,err := http.NewRequest("POST", url, reader)
if err !=nil{
return nil
}
request.Header.Set("Content-Type", "x-protobuf")
request.Header.Set("Connection", "Keep-Alive")
response,err := client.Do(request)
if err !=nil{
return nil
}
*body,_ =ioutil.ReadAll(response.Body)
defer response.Body.Close()
return *body
}