Senden von POST-Requests in Golang mit header
Erstelle ich mir ein Formular wie dieses:
form := url.Values{}
form.Add("region", "San Francisco")
if len(params) > 0 {
for i := 0; i < len(params); i += 2 {
form.Add(params[i], params[i+1])
}
testLog.Infof("form %v", form)
Nun, wenn ich
resp, err = http.PostForm(address+r.Path, form)
dann funktioniert alles einwandfrei, ich bekomme wieder eine Antwort mit einer erwarteten cookie.
Allerdings würde ich gerne einen header hinzufügen, in dem Fall kann ich nicht verwenden PostForm
daher habe ich meine POST request
manuell wie:
req, err := http.NewRequest("POST", address+r.Path, strings.NewReader(form.Encode()))
Dann Stell ich Sachen an den Kopf-und senden Sie die Anfrage
req.Header.Add("region", "San Francisco")
resp, err = http.DefaultClient.Do(req)
Aber die form ist nicht erhalten und meine Antwort enthält keine Cookies.
Wenn ich drucken Sie die req
, es sieht aus wie die form ist nil
:
&{POST http://localhost:8081/login HTTP/1.1 1 1 map[Region:[San Francisco]] {0xc420553600} 78 [] false localhost:8081 map[] map[] <nil> map[] <nil> <nil> <nil> <nil>}
Dies ist eine Webseite, die die Buchung der form, richtig? Sie sind gonna haben zu verwenden JS für diese, wenn das der Fall ist. Wenn Sie arbeiten mit der Vorlage, Gehen Sie den code nicht posten nichts, es ist einfach der Generierung der html ein input-element vom Typ submit. Die Anfrage auf der anderen Seite auch nicht im browser ausgeführt werden, es muss auf dem system laufen. Also, wenn Sie ein html-Formular mit submit einen BEITRAG an ein Go-back-end und Sie möchten, fügen Sie Kopfzeilen, die Sie verwenden müssen, eine
Nein, keine Webseite, das ist ein Go-unit-test. Siehe Antwort unten, setzen den content-type im header behoben mein problem.
XMLHttpRequest
in JavaScript zu erreichen, dass.Nein, keine Webseite, das ist ein Go-unit-test. Siehe Antwort unten, setzen den content-type im header behoben mein problem.
InformationsquelleAutor Jana | 2016-10-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie einen Inhaltstyp auf Ihre Anfrage.
Sagte Sie
http.PostForm
gearbeitet, so schauen wir uns die Quelle:OK, so ist es nur ein wrapper um die
PostForm
Methode, die auf der Standard-client. Schauen wir uns dass:OK, es ruft die
Post
- Methode und übergeben"application/x-www-form-urlencoded"
fürbodyType
und das gleiche tun für den Körper, dass Sie tun. Schauen wir uns die Post-MethodeAlso die Lösung für dein problem ist das hinzufügen
InformationsquelleAutor jcbwlkr