Próbuję wysłać żądanie POST, ale nie mogę tego zrobić. Po drugiej stronie nic nie jest odbierane.
Czy tak to ma działać? Jestem świadomy tej PostForm
funkcji, ale myślę, że nie mogę jej użyć, ponieważ nie można jej przetestować httputil
, prawda?
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
?Odpowiedzi:
W większości masz dobry pomysł, tylko wysłanie formularza jest błędne. Formularz znajduje się w treści żądania.
req, err := http.NewRequest("POST", url, strings.NewReader(form.Encode()))
źródło
Wiem, że to stare, ale ta odpowiedź pojawiła się w wynikach wyszukiwania. Dla następnego gościa - zaproponowana i zaakceptowana odpowiedź działa, jednak kod pierwotnie przesłany w pytaniu jest niższego poziomu niż powinien. Nikt nie ma czasu na takie rzeczy.
//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
źródło
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
Content-Type
Nagłówek jest automatycznie ustawianyapplication/x-www-form-urlencoded
przezPostForm
według: golang.org/pkg/net/http/#PostForm