登录
首页 >  Golang >  Go问答

Golang中遇到请求体EOF错误的问题

来源:stackoverflow

时间:2024-03-14 14:36:14 261浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《Golang中遇到请求体EOF错误的问题》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

我有以下 go 程序,我想读取通过 post 发送的 json 值。我尝试了几种不同的方法,例如 r.body = http.maxbytesreader(w, r.body, 1048576) 首先然后只运行 json.newdecoder(r.body).decode(&u)。所有方法似乎都会给出相同的 eof 错误。我什至尝试过这个 body,err := ioutil.readall(r.body)。所以看起来都一样

func insertUser(w http.ResponseWriter, r *http.Request) {
  type User struct {        
    Uemail string `json:"uEmail"`
    Upass string `json:"uPass"`    
  }
  var u User
  if r.Method == "POST" {
    if r.Header.Get("Content-Type") != "" {
      value, _ := header.ParseValueAndParams(r.Header, "Content-Type")
      if value != "application/json" {
          msg := "Content-Type header is not application/json"
          json.NewEncoder(w).Encode(Errormessage{msg});
          return
      }
    }
    //r.Body = http.MaxBytesReader(w, r.Body, 1048576)
    /*body, err := ioutil.ReadAll(r.Body)
    if err != nil {
        return err
    }*/
    err := json.NewDecoder(r.Body).Decode(&u)
    if err != nil {
      fmt.Println("Decoding error is :", err)
      json.NewEncoder(w).Encode(Errormessage{"Message decoding Issue"});
        return
    }
    var uEmail string = u.Uemail
    var uPass string = u.Upass
   
    fmt.Println("User Namess :", uEmail)
    fmt.Println("User Password :", uPass)

    w.Header().Set("Content-Type", "application/json; charset=utf-8")
    w.Header().Set("X-Content-Type-Options", "nosniff")
  }

正确答案


请尝试运行以下命令

func insertUser(w http.ResponseWriter, r *http.Request) {
  type User struct {        
    Uemail string `json:"uEmail"`
    Upass string `json:"uPass"`    
  }
  var u User
  if r.Method == "POST" {
    if r.Header.Get("Content-Type") != "" {
      value, _ := header.ParseValueAndParams(r.Header, "Content-Type")
      if value != "application/json" {
          msg := "Content-Type header is not application/json"
          json.NewEncoder(w).Encode(Errormessage{msg});
          return
      }
    }

    // CODE CHANGED HERE
    body, err := ioutil.ReadAll(r.Body)
    defer r.Body.Close()
    if err != nil {
        // handle error
        return
    }

    err = json.Unmarshal(body, &u)
    if err != nil {
        // handle error
        return
    }
    // CHANGED TILL HERE

    var uEmail string = u.Uemail
    var uPass string = u.Upass
   
    fmt.Println("User Namess :", uEmail)
    fmt.Println("User Password :", uPass)

    w.Header().Set("Content-Type", "application/json; charset=utf-8")
    w.Header().Set("X-Content-Type-Options", "nosniff")
  }
}

以上就是《Golang中遇到请求体EOF错误的问题》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>