Get httpshubdockercomapicontentv1productssearchpage=1u0026page_size=20 context deadline exceeded ClientTimeout exceeded while awaiting headersfunc HTTPGetpath string params mapstringstring Header maps
该报错是因为在执行HTTP请求时超过了预设的时间限制。可以尝试增加超时时间,或者检查网络连接是否正常。以下是一个修改后的示例代码:
func HTTPGet(path string, params map[string]string, Header map[string]string, flag bool) ([]byte, error) {
uri, err := url.ParseRequestURI(path)
if err != nil {
logger.Error(err.Error())
return nil, err
}
if params != nil && len(params) > 0 {
query := uri.Query()
for key, val := range params {
query.Set(key, val)
}
uri.RawQuery = query.Encode()
}
if !flag {
httpClient = &http.Client{
Transport: &http.Transport{
DisableCompression: true,
//Proxy: http.ProxyURL(getProxyFromEnvironment()),
TLSClientConfig: &tls.Config{InsecureSkipVerify: false},
DialContext: (&net.Dialer{
Timeout: 3600 * time.Second,
KeepAlive: 3600 * time.Second,
}).DialContext,
MaxIdleConns: 100,
MaxIdleConnsPerHost: 10,
IdleConnTimeout: time.Duration(3600) * time.Second,
},
Timeout: 60 * time.Second, // 增加超时时间为60秒
}
}
logger.Info(uri.String())
req, err := http.NewRequest("GET", uri.String(), nil)
if err != nil {
logger.Error(err.Error())
return nil, err
}
if Header != nil && len(Header) > 0 {
for key, val := range Header {
req.Header.Set(key, val)
}
}
resp, err := httpClient.Do(req)
if err != nil {
logger.Error(err.Error())
return nil, err
}
defer func() {
err = resp.Body.Close()
if err != nil {
logger.Error(err.Error())
}
}()
body, err := io.ReadAll(resp.Body)
if err != nil {
logger.Error(err.Error())
return nil, err
}
if resp.StatusCode != http.StatusOK {
logger.Errorf("unexpected status code: %d", resp.StatusCode)
return nil, fmt.Errorf("unexpected status code:%d", resp.StatusCode)
}
return body, nil
}
在这个示例中,将超时时间设置为60秒,可以根据实际情况进行调整。
原文地址: https://www.cveoy.top/t/topic/i5zR 著作权归作者所有。请勿转载和采集!