我有一个实现http.Handler
接口的类型,在它的ServeHTTP
方法中,判断传入的HTTP请求,采取一些操作,然后将请求转发到反向代理处理程序(httputil.NewSingleHostReverseProxy
).
只要我只判断基本的请求属性,比如URL或头,这就可以了.
当我想要判断传入POST请求的正文时(例如,通过调用req.ParseForm()
,然后使用req.Form
属性),一旦请求传递到反向代理,我就会遇到错误:
http: proxy error: http: Request.ContentLength=687 with Body length 0
个
我认为发生这种情况是因为查看HTTP请求的正文会导致req.Body.Reader
流被排空,这意味着代理处理程序不能再次读取它.
我一直在玩像io.Copy()
和bufio.Peek()
这样的东西,但我真的一点进展都没有.
有没有一种方法可以窥视HTTP请求主体(并使用内置的req.ParseForm
等解析),同时将原始请求对象保持在其原始状态,以便将其传递给反向代理?