Ответ 1
Как насчет этого?
req.ParseForm()
req.Form.Get(key)
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" )
что случилось? и как его исправить?
Как насчет этого?
req.ParseForm()
req.Form.Get(key)
Вы уже тестировали его с помощью req.PostFormValue
вместо req.FormValue
?
Я нашел решение с вызовом ParseMultipartForm
до ParseForm
, он работает для меня.
Если вы выполняете POST-запрос multipart/form-data, ParseForm не обрабатывает тело запроса правильно (это может быть ошибка). Итак, используйте ParseMultipartForm, если это так.
Или вы можете напрямую вызвать FormValue или PostFormValue, не вызывая эти методы анализа.
У меня были аналогичные проблемы с использованием 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
}
Надеюсь, что это поможет!
Чтобы извлечь значение из почтового запроса, вы должны сначала позвонить 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>")
// 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
Попробуйте этого приятеля.
надеюсь, что он будет работать, поскольку он работает для меня
r.FormValue("userid")