记录一次在req里面读取body导致的事故http: ContentLength=XXXwith Body length 0
在go语言中我们可以用如下方法取得body
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))
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)
}

浙公网安备 33010602011771号