• golang http.client 遇到了 Connection reset by peer 问题


    最近一个 golang 写的 http.client 的,获取远程服务器数据,有时候会报错,尤其在数量很大的时候,老是收到 Connection reset by peer 这样的 提醒,都有点想用重试机制

    百度,goolge 了一翻后,说的是 它会阻止连接被重用,可以有效的防止这个问题,也就是Http的短连接

    1.在客户端关闭 http 连接

    func main() {
        req, err := http.NewRequest("GET", "http://localhost",nil )
        if err != nil {
            log.Errorf("")
        }
        req.Close = true
        resp, err := http.Client.Do(req)
        ...
    }
    

      

    1. 在头部设置连接状态为关闭
      func main() {
          req, err := http.NewRequest("GET", "http://localhost",nil )
          if err != nil {
              log.Errorf("")
          }
          req.Header.Add("Connection", "close")
          resp, err := http.Client.Do(req)
          ...
      }
      
      1. 使用 Transport 取消 HTTP利用连接
        func main() {
            tr := http.Transport{DisableKeepAlives: true}
            client := http.Client{Transport: &tr}
        
            resp, err := client.Get("https://golang.google.cn/")
            if resp != nil {
                defer resp.Body.Close()
            }
            checkError(err)
        
            fmt.Println(resp.StatusCode)    // 200
        
            body, err := ioutil.ReadAll(resp.Body)
            checkError(err)
        
            fmt.Println(len(string(body)))
        }
        

          

        服务器端设置短连接

      2. func main(){
            server := &http.Server{
        		Handler:handle,
        		ReadTimeout:  20 * time.Second,
        		WriteTimeout: 20 * time.Second,
        	}
        	listen, err := net.Listen("tcp4",s.addr)
        	if err != nil  {
        		logger.Errorf("Failed to listen,err:%s",err.Error())
        		panic(err)
        	}
        	server.SetKeepAlivesEnabled(false)
        	err = server.Serve(listen)
        }
        

          

      参考 了

    2. https://blog.csdn.net/cyberspecter/article/details/83308348  

    3. https://my.oschina.net/shou1156226/blog/808613
  • 相关阅读:
    idea破解
    metasploit常用命令(持續更新...)
    metasploit魔鬼训练营_XSS
    渗透测试流程
    中国电信猫后接路由器具体设置
    python首次尝试——hello world
    【阿圆总结】关于平时阅读的推荐
    【转载】curl 模拟 GETPOST 请求,curl查看响应头 以及 curl post 上传文件
    【转载】用实例给新手讲解RSA加密算法
    【翻译】Open ID Connect---OIDC 是什么东西?
  • 原文地址:https://www.cnblogs.com/jackluo/p/10452026.html
Copyright © 2020-2023  润新知