一、介绍
上一篇我们介绍过 go使用net/http库发送GET请求
本期介绍post请求。
post和get请求不同,主要在于 header部分,而net/http也帮我们封装了快捷的方式来发送post请求。
我们这里发生post请求,这里主要通过两种方式
http.Post()
DefaultClient.Do()
二、http.Post()的请求
2.1 json格式的post请求
func TestP1(t *testing.T) {
url := "http://localhost:8080/v1/discovery"
var contentType string
contentType = "application/json"
jsonBody := `{"id":"1010"}`
resp, err := http.Post(url, contentType, bytes.NewReader([]byte(jsonBody)))
if err != nil {
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
// handle error
}
t.Log(string(body))
}
我们可以看一下http.Post()源码,底层调用的是 DefaultClient.Post()
func Post(url, contentType string, body io.Reader) (resp *Response, err error) {
return DefaultClient.Post(url, contentType, body)
}
我们看一下 DefaultClient.Post()源码,底层调用的是
NewRequest(),以及DefaultClient.Do()
func (c *Client) Post(url, contentType string, body io.Reader) (resp *Response, err error) {
req, err := NewRequest("POST", url, body)
if err != nil {
return nil, err
}
req.Header.Set("Content-Type", contentType)
return c.Do(req)
}
因为我们要传入 Content-Type,最后还是调用了NewRequest(),来生成一个request,这样可以设置Header。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。