记录一次在req里面读取body导致的事故http: ContentLength=XXXwith Body length 0

在go语言中我们可以用如下方法取得body

1
2
3
4
5
6
7
8
9
10
func HelloFunc(resw http.ResponseWriter, req *http.Request)  {
    // 读取req中的body
    body, err := ioutil.ReadAll(req.Body)
    if err != nil {
        fmt.Printf("read body err, %v\n", err)
        return
    }
    bodyStr := string(body)
    fmt.Printf(bodyStr)
}

但是这样读取会导致一个问题,在发送请求的时候body为空。

http: ContentLength=XXXwith Body length 0

这是因为go在做代理的时候将req中的body取出做分析,导致req中body为空,所以才提示body length 0 。

解决办法:

只需要讲取出的body重新放入便可解决:req.Body = ioutil.NopCloser(bytes.NewBuffer(body))

1
2
3
4
5
6
7
8
9
10
11
12
func HelloFunc(resw http.ResponseWriter, req *http.Request)  {
    // 读取req中的body
    body, err := ioutil.ReadAll(req.Body)
    if err != nil {
        fmt.Printf("read body err, %v\n", err)
        return
    }
    bodyStr := string(body)
    //把刚刚读出来的body再写进去
    req.Body = ioutil.NopCloser(bytes.NewBuffer(body))
    fmt.Printf(bodyStr)
}

  

posted @   你学废了吗?  阅读(755)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示