在 Go 中,如何重用 ReadCloser?

我有一个 http 请求,我需要检查其正文。但是当我这样做时,请求失败了。我假设这与 Reader 需要重置有关,但是谷歌搜索并go ioutil reset ReadCloser没有发现任何看起来有希望的东西。


c是*middleware.Context, c.Req.Request是http.Request, c.Req.Request.Body是io.ReadCloser


contents, _ := ioutil.ReadAll(c.Req.Request.Body)

log.Info("Request: %s", string(contents))

proxy.ServeHTTP(c.RW(), c.Req.Request)

具体来说,我得到的错误是 http: proxy error: http: ContentLength=133 with Body length 0


ITMISS
浏览 167回答 1
1回答

手掌心

您无法重置它,因为您已经从中读取了内容并且流中没有任何内容。你可以做的是获取你已经拥有的缓冲字节,并用一个新的替换 Body io.ReadClosercontents, _ := ioutil.ReadAll(c.Req.Request.Body)log.Info("Request: %s", string(contents))c.Req.Request.Body = ioutil.NopCloser(bytes.NewReader(contents))proxy.ServeHTTP(c.RW(), c.Req.Request)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go