Golang

Golang http包req.Body只能读取一次的解决办法

今天参加实验楼的golang比赛,碰到个大坑,比赛要求把http请求的body取出后计算md5然后放入请求头中,然后我用一下代码读取body后,body就无法被再次读取了!无法,被,再次,读取!有毒! body, err := ioutil.ReadAll(req.Body) 经过20分钟调试,发现应该用如下方式来获取body,才不会导致body被抹掉: br, err := req.GetBody() if err == nil { body, err := ioutil.ReadAll(br) } 事实上,从golang1.

Golang

Golang使用http包的Client访问https报x509.SystemRootsError错误

前两天在写的一个api在服务器上跑着,使用http包访问https时报x509.SystemRootsError而无法拿到回包,但是同样的代码在本地却运行正常,纠结好久后终于找到错误原因:由于服务器使用瘦环境,所以没有安装https根证书服务,导致golang无法验证https服务器的身份。 解决这个办法的方法有2个,一个是在服务器中安装https根证书服务(推荐),另一个是关闭golang http包的https安全验证 方法一很简单,一般curl包就包含了根证书,所以直接安装curl即可(ubuntu下通过测试,apline可能不行) 方法二则无需改动服务器环境,但可能面临安全问题。做法是通过传config构建一个自定义的http Client,方法如下: package main import ( "fmt" "net/http"