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