golang http服务器,无法获取发布值

时间:2013-06-03 12:10:54

标签: http go

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”)

得到一个空值 发生了什么事?以及如何解决它?

9 个答案:

答案 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")