Ich schaffe meine Form wie folgt aus:Senden POST-Anfrage in Golang mit Kopf
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
verwendenresp, err = http.PostForm(address+r.Path, form)
dann mit einem erwarteten Cookie eine Antwort alles funktioniert gut, ich zurück.
Allerdings würde Ich mag einen Header hinzuzufügen, in dem Fall, dass ich nicht verwenden können PostForm
daher habe ich meine POST request
manuell wie:
req, err := http.NewRequest("POST", address+r.Path, strings.NewReader(form.Encode()))
dann die Anfrage ich Sachen an den Header hinzufügen und senden
req.Header.Add("region", "San Francisco")
resp, err = http.DefaultClient.Do(req)
Aber das Formular wird nicht empfangen und meine Antwort enthält kein Cookie.
Wenn ich die req
drucken, es sieht aus wie die Form nil
ist:
&{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 veröffentlichen das Formular hinzuzufügen ist, nicht wahr? Sie müssen JS dafür verwenden, wenn das der Fall ist. Wenn Sie mit der Vorlage arbeiten, wird bei Go-Code nichts gepostet, sondern lediglich HTML mit einem Eingabeelement vom Typ "Senden" generiert. Diese Anfrage kann jedoch nicht im Browser ausgeführt werden, sie muss auf dem System ausgeführt werden. Wenn Sie also ein HTML-Formular verwenden, das den POST an ein Go-Back-Ende übergibt und Sie Header hinzufügen möchten, müssen Sie eine 'XMLHttpRequest' in JavaScript verwenden, um das zu erreichen. – evanmcdonnal
Nein, keine Webseite, dies ist ein Go Unit Test. Siehe die Antwort unten, die Einstellung des Inhaltstyps in der Kopfzeile hat mein Problem behoben. – Jana