2016-08-24 2 views
1

Ich bin neu in Golang, vertraut mit http-Paket. Ich habe Probleme, die Postdaten zu erhalten, die ich mit Postboten sende.Get Post-Daten mit Golang http-Paket

http://localhost:8084/dbTest ist meine URI. Ich gebe Schlüssel: hub_id Wert: 1 mit Formulardaten. Ich versuchte folgende Ansätze,

req.ParseForm() 
fmt.Println("hub_id", req.Form["hub_id"]) 
req.Form.Get("hub_id") 

Aber keiner der Ansatz funktioniert. Ich bekomme eine leere Antwort.

Im Anschluss ist mein Code:

package main 

import (
    "fmt" 
    "net/http" 
    "log" 
) 

func dbtest(w http.ResponseWriter, req *http.Request) { 
    req.ParseForm() 
    fmt.Println("hub_id", req.Form["hub_id"]) 
    req.Form.Get("hub_id") 
    fmt.Println(req.PostFormValue("hub_id")) //response is empty 
} 

func main() { 

    http.HandleFunc("/dbTest", dbtest) 

    log.Fatal(http.ListenAndServe(":8084", nil)) 
} 

Wenn ich erf drucken erhalte ich die folgende:

&{POST /dbTest HTTP/1.1 1 1 map[Origin:[chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop] Connection:[keep-alive] Content-Type:[multipart/form-data; boundary=----WebKitFormBoundarydFOTVjOJMeqOHnS3] Content-Length:[138] Accept-Language:[en-US,en;q=0.8] Cache-Control:[no-cache] Accept-Encoding:[gzip, deflate] Accept:[*/*] User-Agent:[Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36] Postman-Token:[ac7ae3a9-60f6-2146-3f1c-209de7622774]] 0xc210012e70 138 [] false localhost:8084 map[] map[] <nil> map[] 127.0.0.1:34152 /dbTest <nil>} 

Lösung: ich die Lösung gefunden. Seit, Content-Typ ist mulipart/form-data Ich korrekte Methode, Formular zu analysieren, ist req.ParseMultipartForm HTTP-Methode zu verwenden.

+0

Bitte zeigen Sie Ihre HTML-Vorlage. –

+0

Ich sende Daten über Postbote – Jagrati

Antwort

1

Sie falsche Content-Type verwenden. Wenn Content-Type:application/x-www-form-urlencoded verwendet wird, werden die Daten korrekt von r.ParseForm() analysiert. Überprüfen Sie danach r.Form.

+0

Willst du es bitte mehr erklären. Hier ist der Inhaltstyp 'Content-Type: [multipart/form-data; boundary = ---- WebKitFormBoundarydFOTVjOJMeqOHnS3] 'welches von POSTMAN gesendet wird. – Jagrati

+1

Hier finden Sie Erklärungen - http://stackoverflow.com/questions/4007969/application-x-www-form-urlencoded-or-multipart-form-data#answer-4073451 In Postman können Sie verschiedene Inhalte definieren -Typ ". Im Bodybereich können Sie unter der URL-Adresse verschiedene Typen auswählen. – s7anley

+0

Ja, ich habe den Wert mit 'Content-Type: application/x-www-form-urlencoded' erhalten, nehme aber an, dass ich in Zukunft' binäre (nicht-alphanumerische) Daten (oder eine signifikant große Payload) 'senden muss 'multipart/form-data' sollte verwendet werden. So erhalten Sie POST-Daten, wenn der Inhaltstyp "Multipart/Formulardaten" lautet. – Jagrati

0

Versuchen

err := r.ParseForm() 
v := r.Form 
h := v.Get("hub_id") 

Edit: Ich sehe, du hast ParseForm versucht

+0

Ich aktualisierte den Code. Es wird immer noch nicht Hub-ID erhalten – Jagrati

+0

Schreiben Sie die Daten, d. H. Methode = "POST" aus einem Formular? – Sridhar

+0

Ja, ich poste die Daten mit Postboten. – Jagrati