Go的http库处理multipart的两个问题解决

问题说明

最近因为项目需要搞了一些golang的开发,碰到不少问题,除了之前踩的那个关于ActiveMQ的坑以外,最近又在用Gin进行Web开发踩到一个http库里的坑。

Gin本身只是一个简单的包装,大部分功能还是基于net/http这个标准库,其中就包括了Request。

这次碰到的两个问题都是由于一个原因引起的:那就是我在处理POST请求接收文件上传的时候,有时会丢失请求参数(上传文件可以收到,但一起传过来的Post参数为空)。

经过返复测试,发现用python的requests发过来的请求是可以正常处理的,但是用Java发过来的请求就出错。

为了调试这个问题,我想把请求内容打出日志来,于是碰到了第一个问题:

Request.Body是一个ReaderCloser缓冲,只能读一次,如果我读出来打日志,那么后面的参数肯定都为空,如果取了参数,则这个缓冲也为空。

当然,第二个问题就是那个POST请求丢失的问题,其原因后面说。

无损读取Request.Body的方法

按官方文档和Stackoverflow上找来的各自方法都尝试过,比如读完再写回,或者是用Bind,都不能正常取到内容,最后是在一个外国人的BLOG的评论里看到有人提到一个方法:

httputil.DumpRequest

最终解决了这个问题,写了一个调试专用的方法:

func req_b
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值