2013-06-03 11 views
13
func login(rw http.ResponseWriter, req *http.Request) { 
    req.ParseForm() 

    if req.Method == "GET" { 
     fmt.Fprintf(rw, "Error Method") 
    } else { 
     name := strings.TrimSpace(req.FormValue("userid")) 
     fmt.Println("userid:", name) 
     fmt.Println("pwd:", req.FormValue("pwd")) 
     fmt.Fprintf(rw, "welcome back,%s", req.FormValue("userid")) 
    } 
} 

i używam ASIhttprequst wysłać od, jak to.serwer HTTP golang, nie można uzyskać wartości posta

[self setRequest:[ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://127.0.0.1:8080/login"]]]; 
[request setPostValue:@"userid" forKey:@"[email protected]"]; 
[request setPostValue:@"pwd" forKey:@"fdsfdsfdkskfjhds"]; 
[request setRequestMethod:@"POST"]; 

mam wartość null z req.FormValue ("id_uzytkownika")

co się stało? i jak to naprawić?

+0

tylko strzał w ciemno - może po prostu miesza się PostValue i PostKey? –

+0

zrzutu żądania HTTP – thwd

Odpowiedz

3

czy przetestowałeś go już z req.PostFormValue zamiast req.FormValue?

+1

tak, próbuję PostFormValue zamiast FormValue, ale wynik jest nadal taki sam. – user1751912

+1

czy przetestowałeś go również z 'req.ParseMultipartForm()' zamiast 'req.ParseForm()'? – Neo

10

Co powiesz na to?

req.ParseForm() 
req.Form.Get(key) 
+2

Tak, ale musisz poprzedzić to poleceniem 'req.ParseForm()'. –

+0

Nie wiem, dlaczego twoja odpowiedź nie została przyjęta. Prosto i do punktu – Mauricio

0

Znalazłem rozwiązanie z wywołaniem ParseMultipartForm przed ParseForm, że pracuje dla mnie.

0

Po utworzeniu żądania POST dla wielu elementów/danych formularza funkcja ParseForm nie analizuje poprawnie treści żądania (może to być błąd). Tak więc użyj ParseMultipartForm, jeśli tak jest.

Można również wywołać metodę FormValue lub PostFormValue bezpośrednio, bez wywoływania tych metod analizy składni.

0

Miałem podobne problemy przy użyciu ParseForm. Skończyło się na zrobieniu czegoś takiego:

type UserRequest struct { 
    UserId string `json:"userid"` 
    Pwd  string `json:"pwd"` 
} 

func login(w http.ResponseWriter, r *http.Request) { 
    var ur UserRequest 
    decode := json.NewDecoder(r.Body) 
    decoder.Decode(&ur) 

    // Access data via struct 
} 

Mam nadzieję, że pomoże!

0

Aby wyodrębnić wartość z żądania, musisz najpierw zadzwonić pod numer r.ParseForm(). This analizuje surowe zapytanie z adresu URL i aktualizuje r.Form.

Dla POST lub PUT żądań, ale również analizuje treści żądania jako forma i umieścić wyniki w obu r.PostForm i r.Form. Parametry POST i PUT body mają pierwszeństwo przed wartościami ciągu zapytania URL w r.Form.

Teraz Twoja r.From jest mapą wszystkich wartości dostarczonych przez klienta. Aby wyodrębnić określoną wartość, można użyć r.FormValue("<your param name>") lub r.Form.Get("<your param name>").

Więc w zasadzie masz to:

r.ParseForm() 
res := r.FormValue("<your param name>") 
-1

Spróbuj kolego.

nadzieję, że będzie to działało jak to działa na mnie

r.FormValue("userid") 
0
// Form contains the parsed form data, including both the URL 
    // field's query parameters and the POST or PUT form data. 
    // **This field is only available after ParseForm is called.** 
    // The HTTP client ignores Form and uses Body instead. 
    Form url.Values 

    // PostForm contains the parsed form data from POST, PATCH, 
    // or PUT body parameters. 
    // 
    // **This field is only available after ParseForm is called.** 
    // The HTTP client ignores PostForm and uses Body instead. 
    PostForm url.Values 
+0

To pole jest dostępne tylko po wywołaniu ParseForm. – Hao

Powiązane problemy