Я пытаюсь отправить запрос 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)
httputil
?Ответы:
У вас в основном правильная идея, просто отправленная форма неверна. Форма входит в тело запроса.
req, err := http.NewRequest("POST", url, strings.NewReader(form.Encode()))
источник
Я знаю, что это старый, но этот ответ появился в результатах поиска. Для следующего парня - предложенный и принятый ответ работает, однако код, изначально представленный в вопросе, является более низким уровнем, чем должен быть. На это ни у кого нет времени.
//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
источник
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
Content-Type
Заголовок автоматически устанавливаетсяapplication/x-www-form-urlencoded
путемPostForm
, в соответствии с: golang.org/pkg/net/http/#PostForm