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

如何在 Go 中执行 HTTP 双工处理程序?

如何在 Go 中执行 HTTP 双工处理程序?

Go
白衣非少年 2021-06-27 12:55:27
听说这里是一旦您在响应中写入任何内容,请求正文将被关闭,从而阻止您从中读取任何内容如果这是真的,我如何编写一个合适的双工处理程序,它能够从请求正文中读取,进行某种转换,然后以流方式写入响应正文,就像人们在 node.js 中所做的那样?
查看完整描述

2 回答

?
Qyouu

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()


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

添加回答

举报

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