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发送一个from,就像这样。
[self setRequest:[ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://127.0.0.1:8080/login"]]];
[request setPostValue:@"userid" forKey:@"fdfs@jkjlf.cm"];
[request setPostValue:@"pwd" forKey:@"fdsfdsfdkskfjhds"];
[request setRequestMethod:@"POST"];
我使用req.FormValue(“userid”)
得到一个空值 发生了什么事?以及如何解决它?答案 0 :(得分:10)
这个怎么样?
req.ParseForm()
req.Form.Get(key)
答案 1 :(得分:3)
您是否已使用req.PostFormValue
代替req.FormValue
对其进行了测试?
答案 2 :(得分:0)
我在ParseMultipartForm
之前找到了调用ParseForm
的解决方案,它适用于我。
答案 3 :(得分:0)
如果你发出multipart / form-data POST请求,ParseForm不能正确解析请求体(这可能是一个bug)。因此,如果是这种情况,请使用ParseMultipartForm。
或者您可以直接调用FormValue或PostFormValue而无需调用这些解析方法。
答案 4 :(得分:0)
我使用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
}
希望有所帮助!
答案 5 :(得分:0)
要从帖子请求中提取值,您必须先调用r.ParseForm()
。 This解析URL中的原始查询并更新r.Form。
对于POST或PUT请求,它还会将请求正文解析为表单 并将结果放入r.PostForm和r.Form中。 POST和PUT身体 参数优先于r.Form中的URL查询字符串值。
现在,您的r.From
是客户提供的所有值的地图。要提取特定值,您可以使用r.FormValue("<your param name>")
或r.Form.Get("<your param name>")
。
所以基本上你会有这个:
r.ParseForm()
res := r.FormValue("<your param name>")
答案 6 :(得分: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
答案 7 :(得分:0)
确保通过读取某些级别的内容来清除 req.Body io.Reader
缓冲区
ex:ioutil.ReadAll
如果清除了主体缓冲区,即使您FormValue
,也会在ParseForm
上返回空值
答案 8 :(得分:-1)
试试这个伙伴。
希望它能够正常运作
r.FormValue("userid")