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

我使用 ASIhttprequst 发送一个来自,像这样。

[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") 得到了一个空值

发生了什么事?以及如何解决?

4

9 回答 9

11

这个怎么样?

req.ParseForm()
req.Form.Get(key)
于 2014-03-11T20:46:14.920 回答
4

您是否已经使用req.PostFormValue而不是对其进行了测试req.FormValue

于 2013-06-03T12:52:31.870 回答
0

我之前找到了调用的解决方案ParseMultipartFormParseForm它对我有用。

于 2014-10-08T10:30:02.730 回答
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
于 2017-03-24T03:28:33.857 回答
0

确保req.Body io.Reader缓冲区通过在某个级别读取它被清除

例如:如果正文缓冲区被清除,即使你ioutil.ReadAll也将返回空值FormValueParseForm

于 2020-09-23T07:47:11.093 回答
0

如果您发出 multipart/form-data POST 请求,ParseForm 不会正确解析请求正文(这可能是一个错误)。因此,如果是这种情况,请使用 ParseMultipartForm。

或者您可以直接调用 FormValue 或 PostFormValue 而不调用这些解析方法。

于 2015-08-25T22:37:08.767 回答
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
}

希望有帮助!

于 2015-09-11T22:04:38.867 回答
0

要从发布请求中提取值,您必须首先调用r.ParseForm()会解析来自 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>")
于 2016-06-12T05:29:00.680 回答
-1

试试这个朋友。

希望它对我有用

r.FormValue("userid")
于 2017-02-20T10:11:24.980 回答