我用 golang 写了一个小的 web 应用程序
go version go1.7.4 linux/amd64 Go Code:
r.ParseForm()
// logic part of log in
fmt.Println("username:", r.Form["username"])
fmt.Println("password:", r.Form["password"])
HTML template
<body>
<div class="container">
<h1>Login In</h1>
<form action="/login" method="POST">
<div class="form-group">
<label for="username">User Name</label>
<input type="text" class="form-control" name="username" placeholder="Please enter your user name">
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" class="form-control" name="password" placeholder="Please enter your password">
</div>
<button type="submit" class="btn btn-success">Login</button>
</form>
</div>
</body>
当我打印时使用
requestbody, _ := ioutil.ReadAll(r.Body)
log.Println("request body is", string(requestbody))
它打印正确的值以及输入的用户名和密码。
但是当我尝试使用 r.Form
打印它时,它给出了空值。
这种方法有什么问题吗?
func loginHandler(w http.ResponseWriter, r *http.Request) {
log.Println("loginHandler")
log.Println("request url is", r.RequestURI)
log.Println("request method", r.Method)
requestbody, _ := ioutil.ReadAll(r.Body)
log.Println("request body is", string(requestbody))
if r.Method == "POST" {
r.ParseForm()
// logic part of log in
fmt.Println("username:", r.Form["username"])
fmt.Println("password:", r.Form["password"])
us, err := globalSessions.SessionStart(w, r)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.Header().Set("Location", "/auth")
w.WriteHeader(http.StatusFound)
return
}
outputHTML(w, r, "static/login.html")
}
最佳答案
注释下面的代码:
requestbody, _ := ioutil.ReadAll(r.Body)
因为 Request.Body
的类型是 ReadCloser
将清空 r.Body
。
关于html - r.From ["username"] 给出空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43580900/