go笔记:go发起http请求 ## 默认情况 最简单的,使用DefaultClient,但不能控制超时时间。 适合大部分情况。 ```go // Post send http post func Post(url string, request []byte, header map[string]string) ([]byte, error) { req, err := http.NewRequest("POST", url, bytes.NewReader(request)) if err != nil { return nil, err } var body []byte req.Header.Set("Content-Type", "application/json") for k, v := range header { req.Header.Set(k, v) } res, err := http.DefaultClient.Do(req) // 这里的顺序很有讲究,不要改动 if res != nil { defer res.Body.Close() } if err != nil { return body, err } body, err = ioutil.ReadAll(res.Body) if err != nil { return body, err } return body, nil } ``` ## 控制超时 如果想控制超时,需要将: ``` res, err := http.DefaultClient.Do(req) ``` 改为: ``` client := http.Client{ // Transport: trans, Timeout: time.Duration(3) * time.Second, } res, err := client.Do(req) ``` 此时Transport未被赋值,会使用default的参数。 ## 自定义transport transport有很多配置,一般关注下面三个即可。具体含义见字段注释 ```go var trans = &http.Transport{ MaxIdleConns: 1000, MaxIdleConnsPerHost: 100, MaxConnsPerHost: 100, IdleConnTimeout: 90 * time.Second, } ... client := http.Client{ Transport: trans, Timeout: time.Duration(3) * time.Second, } res, err := client.Do(req) ``` 来自 大脸猫 写于 2017-09-05 19:46 -- 更新于2024-08-23 11:34 -- 0 条评论