记录一次在req里面读取body导致的事故http: ContentLength=XXXwith Body length 0
在go语言中我们可以用如下方法取得body
1 2 3 4 5 6 7 8 9 10 | func HelloFunc(resw http.ResponseWriter, req *http.Request) { // 读取req中的body body, err := ioutil.ReadAll(req.Body) if err != nil { fmt.Printf( "read body err, %v\n" , err) return } bodyStr := string(body) fmt.Printf(bodyStr) } |
但是这样读取会导致一个问题,在发送请求的时候body为空。
http: ContentLength=XXXwith Body length 0
这是因为go在做代理的时候将req中的body取出做分析,导致req中body为空,所以才提示body length 0 。
解决办法:
只需要讲取出的body重新放入便可解决:req.Body = ioutil.NopCloser(bytes.NewBuffer(body))
1 2 3 4 5 6 7 8 9 10 11 12 | func HelloFunc(resw http.ResponseWriter, req *http.Request) { // 读取req中的body body, err := ioutil.ReadAll(req.Body) if err != nil { fmt.Printf( "read body err, %v\n" , err) return } bodyStr := string(body) //把刚刚读出来的body再写进去 req.Body = ioutil.NopCloser(bytes.NewBuffer(body)) fmt.Printf(bodyStr) } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!