如何在Go中发送POST请求?

时间:2014-06-30 15:00:58

标签: go

我正在尝试发出POST请求,但我无法完成它。另一方没有收到任何东西。

它是如何工作的?我知道PostForm函数,但我认为我无法使用它,因为它无法使用httputil进行测试,对吧?

hc := http.Client{}
req, err := http.NewRequest("POST", APIURL, nil)

form := url.Values{}
form.Add("ln", c.ln)
form.Add("ip", c.ip)
form.Add("ua", c.ua)
req.PostForm = form
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")

glog.Info("form was %v", form)
resp, err := hc.Do(req)

2 个答案:

答案 0 :(得分:107)

你有大多数正确的想法,只是发送错误的表格。表单属于请求正文。

req, err := http.NewRequest("POST", url, strings.NewReader(form.Encode()))

答案 1 :(得分:23)

我知道这很老,但是这个答案出现在搜索结果中。对于下一个人-提出并接受的答案有效,但是问题中最初提交的代码比所需的级别低。没有人有时间。

//one-line post request/response...
response, err := http.PostForm(APIURL, url.Values{
    "ln": {c.ln},
    "ip": {c.ip},
    "ua": {c.ua}})

//okay, moving on...
if err != nil {
  //handle postform error
}

defer response.Body.Close()
body, err := ioutil.ReadAll(response.Body)

if err != nil {
  //handle read response error
}

fmt.Printf("%s\n", string(body))

https://golang.org/pkg/net/http/#pkg-overview

相关问题