Подтвердить что ты не робот

Golang http server, не может получить значение post

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"))
    }
}

и я использую ASIhttprequst для отправки, например.

[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"];

я получил нулевое значение с req.FormValue( "userid" )

что случилось? и как его исправить?

4b9b3361

Ответ 1

Как насчет этого?

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

Ответ 2

Вы уже тестировали его с помощью req.PostFormValue вместо req.FormValue?

Ответ 3

Я нашел решение с вызовом ParseMultipartForm до ParseForm, он работает для меня.

Ответ 4

Если вы выполняете POST-запрос multipart/form-data, ParseForm не обрабатывает тело запроса правильно (это может быть ошибка). Итак, используйте ParseMultipartForm, если это так.

Или вы можете напрямую вызвать FormValue или PostFormValue, не вызывая эти методы анализа.

Ответ 5

У меня были аналогичные проблемы с использованием ParseForm. В итоге я сделал что-то вроде этого:

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
}

Надеюсь, что это поможет!

Ответ 6

Чтобы извлечь значение из почтового запроса, вы должны сначала позвонить r.ParseForm(). Это анализирует необработанный запрос из URL-адреса и обновляет r.Form.

Для запросов POST или PUT он также анализирует тело запроса как форму и поместите результаты в r.PostForm и r.Form. Тело POST и PUT параметры имеют приоритет над значениями строки запроса URL в r.Form.

Теперь ваш r.From представляет собой карту всех значений, предоставленных вашим клиентом. Чтобы извлечь конкретное значение, вы можете использовать r.FormValue("<your param name>") или r.Form.Get("<your param name>").

Итак, в основном у вас будет это:

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

Ответ 7

    // Form contains the parsed form data, including both the URL
    // field 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

Ответ 8

Попробуйте этого приятеля.

надеюсь, что он будет работать, поскольку он работает для меня

r.FormValue("userid")