英文:
golang http server,can't get post value
问题
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"))
}
}
and i using ASIhttprequst send a from,like this.
[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"];
i got a null value with req.FormValue("userid")
what happend? and how to fix it?
英文:
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"))
}
}
and i using ASIhttprequst send a from,like this.
[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"];
i got a null value with req.FormValue("userid")
what happend? and how to fix it?
答案1
得分: 10
这样怎么样?
req.ParseForm()
req.Form.Get(key)
英文:
How about this?
req.ParseForm()
req.Form.Get(key)
答案2
得分: 4
你已经使用req.PostFormValue
而不是req.FormValue
进行测试了吗?
英文:
did you already test it with req.PostFormValue
instead of req.FormValue
?
答案3
得分: 0
我在调用ParseForm
之前使用ParseMultipartForm
找到了解决方案,对我有效。
英文:
I've found solution with calling ParseMultipartForm
before ParseForm
, it works for me.
答案4
得分: 0
如果您进行multipart/form-data的POST请求,ParseForm无法正确解析请求体(这可能是一个bug)。所以,如果是这种情况,请使用ParseMultipartForm。
或者,您可以直接调用FormValue或PostFormValue而不调用这些解析方法。
英文:
If you make multipart/form-data POST request, ParseForm does not parse request body correctly (this might be a bug). So, use ParseMultipartForm if that is the case.
Or you can call FormValue or PostFormValue directly without calling these parse methods.
答案5
得分: 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)
// 通过结构体访问数据
}
希望对你有所帮助!
英文:
I had similar issues using ParseForm. I ended up doing something like this:
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
}
Hope that helps!
答案6
得分: 0
要从POST请求中提取一个值,首先要调用r.ParseForm()
。这个会解析URL中的原始查询并更新r.Form。
> 对于POST或PUT请求,它还会将请求体解析为一个表单,并将结果放入r.PostForm和r.Form中。POST和PUT请求体参数优先于r.Form中的URL查询字符串值。
现在你的r.Form
是客户端提供的所有值的映射。要提取特定的值,可以使用r.FormValue("<your param name>")
或r.Form.Get("<your param name>")
。
所以基本上你会有这样的代码:
r.ParseForm()
res := r.FormValue("<your param name>")
英文:
To extract a value from a post request you have to call r.ParseForm()
at first. This parses the raw query from the URL and updates r.Form.
> For POST or PUT requests, it also parses the request body as a form
> and put the results into both r.PostForm and r.Form. POST and PUT body
> parameters take precedence over URL query string values in r.Form.
Now your r.From
is a map of all values your client provided. To extract a particular value you can use r.FormValue("<your param name>")
or r.Form.Get("<your param name>")
.
So basically you will have this:
r.ParseForm()
res := r.FormValue("<your param name>")
答案7
得分: 0
// 表单包含解析后的表单数据,包括URL字段的查询参数和POST或PUT表单数据。
// 只有在调用ParseForm之后,该字段才可用。
// HTTP客户端忽略Form字段,而使用Body字段。
表单 url.Values
// PostForm包含来自POST、PATCH或PUT请求体参数的解析后的表单数据。
//
// 只有在调用ParseForm之后,该字段才可用。
// HTTP客户端忽略PostForm字段,而使用Body字段。
PostForm url.Values
英文:
// 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
答案8
得分: 0
确保 req.Body 的 io.Reader
缓冲区在某个级别上被读取后被清空
例如:使用 ioutil.ReadAll
,如果 Body 缓冲区被清空,即使你使用了 ParseForm
,FormValue
也会返回空值。
英文:
Make sure the req.Body io.Reader
buffer is getting cleared by reading it in some level
ex: ioutil.ReadAll
if Body buffer got cleared it will return empty value on FormValue
even you ParseForm
答案9
得分: -1
试试这个伙计。
希望它能像对我一样有效。
r.FormValue("userid")
英文:
Try this buddy.
hope it will work as it works for me
r.FormValue("userid")
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论