Golang在http.Request中保留了一些请求'body'

时间:2016-09-13 15:13:58

标签: go

我的错误在这里解释得很清楚: https://github.com/golang/go/issues/17088

我不知道这是否是对http包概念的误解,但是在发送请求(client.Do)后,我无法返回请求的“body”(我的POST请求发送的参数)。 。

示例:

func showRequestBody(r *http.Request) {
  fmt.Println(r)
  fmt.Println(r.Body)
}

给我一​​张空地图或当我这样做时:r.Form或r.PostForm它是零或空的。

谢谢:)(更多信息和github链接上的优秀代码突出显示)

1 个答案:

答案 0 :(得分:0)

Body不是一个字符串而是一个Reader(更具体地说是ReadCloser)。当你读取一些字节时,你从流中取出它,你就不能再读它了。

如果您确实需要在发送之前拦截Body,并且无法再从源中读取,则解决方案是在从缓冲区重建新的ReadCloser之前将其读入缓冲区。

编辑:此时我意识到这主要是Reading body of http.Request without modifying request state?的重复,我投票结束。如果没有任何结果,我可能会删除答案。