golang http 操作汇总

二维码
| Apr 28, 2020 | 原创

Get 请求

方法一

内置方法,不推荐线上环境使用,无法定制具体请求参数,如超时等:

import "net/http"
...
rsp, err := http.Get("https://wwww.yuankan.co")

方法二

client := &http.Client{
    Timeout:    time.Second * 5,
}

rsp, err := client.Get("https://yuankan.co")
if err != nil {
    return err
}

defer rsp.Body.Close()

方法三

直接使用最本质的方式

client := &http.Client{
    Timeout:    time.Second * 5,
}

req, err := http.NewRequest("GET", "https://yuankan.co", nil)
if err != nil {
	return err
}

rsp, err := client.Do(req)
if err != nil {
	return nil
}

defer rsp.Body.Close()

Post 请求

方式一

和默认提供的内置 Get 请求方式类似,Post 方式也是如此,有点鸡肋,测试可使用,但是线上环境尽量不要使用:

// 组织参数
data := url.Values{"username":{"yuankan"}, "city":{"china"}}
body := strings.NewReader(data.Encode())
rsp, err := http.Post("https://yuankan.co", "application/x-www-form-urlencoded", body)

方式二

// 组织参数
data := url.Values{"username":{"yuankan"}, "city":{"china"}}
body := strings.NewReader(data.Encode())

c := &http.Client{
    Timeout:    time.Second * 5,
}
rsp, err := c.Post("https://yuankan.co", "application/x-www-form-urlencoded", body)

// 或者使用PostForm提交
// rsp, err := c.PostForm("https://yuankan.co", data)

方式三

data := url.Values{"username":{"yuankan"}, "city":{"china"}}
body := strings.NewReader(data.Encode())
c := &http.Client{
	Timeout: time.Second * 5,
}

req, err := http.NewRequest("POST", "https://yuankan.co", body)
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")

c.Do(req)

不管是 Get 请求还是 Post 请求,使用时一定要注意对返回的 rsp 数据流进行关闭操作:

rsp, err := c.Do(req)
if err != nil {
    return err
}
defer rsp.Body.Close()