为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中,如何重用 ReadCloser?

在 Go 中,如何重用 ReadCloser?

Go
ITMISS 2021-11-22 10:47:44
我有一个 http 请求,我需要检查其正文。但是当我这样做时,请求失败了。我假设这与 Reader 需要重置有关,但是谷歌搜索并go ioutil reset ReadCloser没有发现任何看起来有希望的东西。c是*middleware.Context, c.Req.Request是http.Request, c.Req.Request.Body是io.ReadClosercontents, _ := 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
查看完整描述

1 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

您无法重置它,因为您已经从中读取了内容并且流中没有任何内容。


你可以做的是获取你已经拥有的缓冲字节,并用一个新的替换 Body io.ReadCloser


contents, _ := 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)


查看完整回答
反对 回复 2021-11-22
  • 1 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信