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

使用 Golang 读取时 http.Request.Body 中没有内容

使用 Golang 读取时 http.Request.Body 中没有内容

Go
浮云间 2021-11-08 18:28:00
注意:为简单起见,省略了所有错误处理代码。我在本地处理它们,没有产生错误。在 Golang 中,我尝试使用下面的代码http.Request.Body从 POST 请求中读取 a :func readBody(req *http.Request) string {    bytes, _ := httputils.DumpRequestOut(req, true)    return string(bytes)}它显示了一个非零的 Content-Length,但没有返回任何内容:ContentLength=413 with Body length 0. 我尝试了下面的代码,也没有运气:func readBody(req *http.Request) string {    bytes, _ := ioutil.ReadAll(req.Body)    return string(bytes)}它返回一个空字符串。google了下,找到了一篇关于这个问题的博客:Golang: Read from an io.ReadWriter without lost its content。我试图遵循模式,但仍然没有运气:func readBody(req *http.Request) string {    bodyBytes, _ := ioutil.ReadAll(req.Body)    // Restore the io.ReadCloser to its original state    req.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))    // Use the content    return string(bodyBytes)}有什么建议?提前致谢 :)
查看完整描述

2 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

如果请求不包含适当的“Content-Type”标头,当您尝试阅读它时,您可能会看到长度为 0 的正文。


查看完整回答
反对 回复 2021-11-08
?
大话西游666

TA贡献1817条经验 获得超14个赞

发生这种情况是因为您httputils.DumpRequestOut(req, true)在 http 客户端执行请求并且正文耗尽后调用。

确保按顺序执行以下步骤:

  1. httputils.DumpRequestOut(req, true)

  2. resp, err :=http.DefaultClient.Do(req)

  3. httputil.DumpResponse(res, true)


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

添加回答

举报

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