当前位置: 首页 > 工具软件 > Go Curl > 使用案例 >

go curl发起步骤

卜鹏
2023-12-01

go 发起 curl 请求

  1. curl 属于客户端的请求

    cli := &http.Client{
      Timeout:6,  // 整个请求周期的时间
      Transport: &http.Transport{
          	ResponseHeaderTimeout: 5, // 等待响应的时间(responseHeader) (响应返回响应头信息)
        	DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) { //文档推荐用 DialContext 其它同学都用的 Dial 现在已经废弃了
                conn, err := net.DialTimeout(network, addr, time.Second*5)  // 拨号超时 (相当于查找IP 连接服务器)
                if err != nil {
                    return nil, err
                }
                conn.SetDeadline(time.Now().Add(time.Second * 5)) // 读写超时时间
                return conn, nil
            },
      }
    }
    
    • 如果要使用 keep-alives 可以用下面的配置
      http.Client{
          Timeout: 5 * time.Second,
          Transport: &http.Transport{
              Proxy: http.ProxyFromEnvironment,
              DialContext: (&net.Dialer{
                  Timeout:   1 * time.Second,
                  KeepAlive: 30 * time.Second,
                  DualStack: true,
              }).DialContext,
              MaxIdleConns:        100,
              MaxIdleConnsPerHost: 8,
              IdleConnTimeout:     120 * time.Second,
          },
      }
      
  2. 设置请求的信息 url header method http协议 等等

      req, err := http.NewRequest(method, url, body)  // method-GET|POST url-http://www.xxx.com/xx  body-post的请求体
      req.Header.Set(k, v) // 设置的请求头信息
      req.AddCookie(&http.Cookie{  // 设置cookie
    			Name:  k,
    			Value: v,
    		})
      q := req.URL.Query()
      q.Add(k,v) // 设置  get 请求参数
      req.URL.RawQuery = q.Encode()
    
    
  3. 最后发送请求

    resp, err := cli.Do(req)  // cli-第一步里的cli  req-第二部里的req
    headerInfo := resp.Header  // 获取头信息
    body, err := ioutil.ReadAll(resp.Body)  // 获取返回的主体信息
    
    
 类似资料: