2017-04-24 3 views
1

j'ai écrit une petite application web en utilisant golangr.From [ "nom d'utilisateur"] donnant des valeurs vides

la version linux go go1.7.4/amd64 Aller 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>

Quand je suis l'impression en utilisant

requestbody, _ := ioutil.ReadAll(r.Body) 
log.Println("request body is", string(requestbody)) 

Il imprime des valeurs correctes avec un nom d'utilisateur et un mot de passe. Mais quand j'ai essayé de l'imprimer en utilisant r.Form, cela donne une valeur vide. Est-ce que quelque chose ne va pas dans cette approche?

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

Répondre

3

Commentaire du code ci-dessous:

requestbody, _ := ioutil.ReadAll(r.Body) 

Parce que le type de Request.Body est ReadCloser qui videra r.Body.

Pour votre information, Golang read request body

+0

oui son travail maintenant, après le retrait du corps de la demande ,, hourras –