dqde43215 2017-10-05 06:45
浏览 974
已采纳

Golang无法从request.GetBody()获取正文

I try to read the request body via request.GetBody(), since I need to read the same request body more than once, but I always get the error below. I checked if the req.body is empty, but it is not. I cant even call req.GetBody(). My Go version is 1.8.1.

 func read(res http.ResponseWriter, req *http.Request) {

     _, err := req.GetBody()
    if err != nil {
        res.Write([]byte(err.Error()))
        return
    }

}

Error:

http: panic serving [::1]:53174: runtime error: invalid memory address or nil pointer dereference
  • 写回答

2条回答 默认 最新

  • drtppp75155 2017-10-05 07:38
    关注

    The GetBody() func on Request is only for client requests (see the documentation over the GetBody member: https://golang.org/pkg/net/http/#Request), but it looks like you're doing a server-side handler. Therefore, you need to use the req.Body member, which is an io.ReadCloser. To read from an io.ReadCloser you can use the io/ioutil package and the ReadAll() func:

    b, err := ioutil.ReadAll(req.Body)
    if err != nil {
        panic(err)
    }
    
    fmt.Printf("%s", b)
    

    More information on the ReadAll() func: https://golang.org/pkg/io/ioutil/#example_ReadAll

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 github训练的模型参数无法下载
  • ¥15 51单片机显示器问题
  • ¥20 关于#qt#的问题:Qt代码的移植问题
  • ¥50 求图像处理的matlab方案
  • ¥50 winform中使用edge的Kiosk模式
  • ¥15 关于#python#的问题:功能监听网页
  • ¥15 怎么让wx群机器人发送音乐
  • ¥15 fesafe材料库问题
  • ¥35 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油