该报错是因为在执行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秒,可以根据实际情况进行调整。

Get httpshubdockercomapicontentv1productssearchpage=1u0026page_size=20 context deadline exceeded ClientTimeout exceeded while awaiting headersfunc HTTPGetpath string params mapstringstring Header maps

原文地址: https://www.cveoy.top/t/topic/i5zR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录