2 回答
TA贡献1786条经验 获得超11个赞
我最终设法用http.Hijacker.
在发出请求并解析请求标头后,我可以从 读取*http.Request.Body,然后劫持连接并同时写入它,如下所示:
hj, ok := w.(http.Hijacker)
if !ok {
http.Error(w, "hijacking not supported", 500)
return
}
conn, bufrw, err := hj.Hijack()
if err != nil {
http.Error(w, err.Error(), 500)
return
}
defer conn.Close()
然后conn是 a net.Conn,它是到客户端的底层 TCP 连接,bufrw是 a *bufio.ReadWriter,并且要在不关闭正文的情况下编写响应,我所要做的就是
_, err = bufrw.WriteString("HTTP/1.1 200 OK\n\n")
_, err = bufrw.WriteString("this")
_, err = bufrw.WriteString("is")
_, err = bufrw.WriteString("the")
_, err = bufrw.WriteString("response")
_, err = bufrw.WriteString("body")
然后我不确定这一点,但也许有人可以完成答案,偶尔将缓冲区刷新到连接中是个好主意
err := bufrw.Flush()
- 2 回答
- 0 关注
- 197 浏览
添加回答
举报