初级会员
  • 第 78888 位会员
  • DreamingPHPer
  • 编码之道
  • 2023-09-05 12:01:54
  • Offline
  • 20 0

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • #3 @dagongrenzzZ 是递归的问题?
  • #1 @jiansoft 但是实际接口响应一般都是在1秒以内
  • #3 @jjmgx 嗯嗯,可以了,谢谢啦
  • 这是发起请求的代码: ``` func Get(api string, params, headers map[string]string, timeout int) (error, int, interface{}) { // 创建 http 客户端 defaultTransport := http.DefaultTransport tr := *defaultTransport.(*http.Transport) tr.TLSClientConfig = &tls.Config{ InsecureSkipVerify: true, } tr.DisableKeepAlives = true client := &http.Client{Transport: &tr} // 设置超时时间 if timeout > 0 { client.Timeout = time.Duration(timeout) * time.Second } else { client.Timeout = time.Duration(5) * time.Second } // 创建请求 req, _ := http.NewRequest("GET", api, nil) // GET 请求携带查询参数 q := req.URL.Query() if len(params) > 0 { for key, value := range params { q.Add(key, value) } } req.URL.RawQuery = q.Encode() // 设置请求头 if len(headers) > 0 { for key, value := range headers { req.Header.Set(key, value) } } // 发送请求 req.Header.Set("Connection", "close") resp, err := client.Do(req) if err != nil { if strings.Contains(err.Error(), "Timeout") { return Get(api, params, headers, timeout) } // 上报日志 return err, 0, nil } // 关闭连接 defer resp.Body.Close() // 读取内容 body, err := io.ReadAll(resp.Body) if err != nil { // 上报日志 return err, resp.StatusCode, nil } return nil, resp.StatusCode, string(body) } ```
  • 已经添加close了 ``` func Get(api string, params, headers map[string]string, timeout int) (error, int, interface{}) { // 创建 http 客户端 defaultTransport := http.DefaultTransport tr := *defaultTransport.(*http.Transport) tr.TLSClientConfig = &tls.Config{ InsecureSkipVerify: true, } tr.DisableKeepAlives = true client := &http.Client{Transport: &tr} // 设置超时时间 if timeout > 0 { client.Timeout = time.Duration(timeout) * time.Second } else { client.Timeout = time.Duration(5) * time.Second } // 创建请求 req, _ := http.NewRequest("GET", api, nil) // GET 请求携带查询参数 q := req.URL.Query() if len(params) > 0 { for key, value := range params { q.Add(key, value) } } req.URL.RawQuery = q.Encode() // 设置请求头 if len(headers) > 0 { for key, value := range headers { req.Header.Set(key, value) } } // 发送请求 req.Header.Set("Connection", "close") resp, err := client.Do(req) if err != nil { if strings.Contains(err.Error(), "Timeout") { return Get(api, params, headers, timeout) } // 上报日志 return err, 0, nil } // 关闭连接 defer resp.Body.Close() // 读取内容 body, err := io.ReadAll(resp.Body) if err != nil { // 上报日志 return err, resp.StatusCode, nil } return nil, resp.StatusCode, string(body) } ```