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") で null 値を取得しました

何が起こった?そしてそれを修正する方法は?

4

9 に答える 9

11

これはどう?

req.ParseForm()
req.Form.Get(key)
于 2014-03-11T20:46:14.920 に答える
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

ParseMultipartForm前に呼び出すことで解決策を見つけましParseFormた。それは私にとってはうまくいきます。

于 2014-10-08T10:30:02.730 に答える
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 に答える
0

multipart/form-data POST リクエストを作成すると、ParseForm はリクエスト ボディを正しく解析しません (これはバグの可能性があります)。その場合は、ParseMultipartForm を使用します。

または、これらの解析メソッドを呼び出さずに FormValue または PostFormValue を直接呼び出すことができます。

于 2015-08-25T22:37:08.767 に答える