我想在golang中使用hijack,但在客户端上获得无效响应
我想在golang中使用hijack,同时在客户端上收到无效响应我想在golang中使用hijack,但在客户端上获得无效响应,go,Go,我想在golang中使用hijack,同时在客户端上收到无效响应 func劫持(w http.ResponseWriter,r*http.Request){ fmt.Println(“开始”) hj,ok:=w.(http.jacker) fmt.Println(正常) c、 buf,err:=hj.jackit() 如果错误!=零{ 恐慌(错误) } n、 err:=buf.Write([]字节(“hello”)) 如果错误!=零{ 恐慌(错误) } fmt.Println(“n==”,n)
func劫持(w http.ResponseWriter,r*http.Request){
fmt.Println(“开始”)
hj,ok:=w.(http.jacker)
fmt.Println(正常)
c、 buf,err:=hj.jackit()
如果错误!=零{
恐慌(错误)
}
n、 err:=buf.Write([]字节(“hello”))
如果错误!=零{
恐慌(错误)
}
fmt.Println(“n==”,n)
err=buf.Flush()
如果错误!=零{
恐慌(错误)
}
fmt.Println(“结束”)
}
在服务器上打印以下内容:
start
true
n == 5
end
但我在客户机上发现了以下错误
localhost发送了无效响应。错误\u无效\u HTTP\u响应
正如劫持者的文件所说 劫持允许调用方接管连接。过了一会儿 调用劫持HTTP服务器库将不起作用 连接还有什么问题吗。
管理和关闭已成为呼叫方的责任 连接。
返回的net.Conn可能已经设置了读取或写入截止日期, 取决于服务器的配置。它是 来电者设定或清除这些截止日期的责任 根据需要。
返回的bufio.Reader可能包含来自的未处理缓冲数据 客户。
呼叫劫持后,不得使用原始请求。正文。这个 原始请求的上下文保持有效,直到 请求的ServeHTTP方法返回 您需要写入
c
,而不是buf
。您还需要编写响应状态和内容长度
标题
http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
fmt.Println("start")
writer.Header().Add("Content-Length", "5")
writer.WriteHeader(200)
hj, ok := writer.(http.Hijacker)
fmt.Println(ok)
c, _, err := hj.Hijack()
if err != nil {
panic(err)
}
n, err := c.Write([]byte("hello"))
if err != nil {
panic(err)
}
fmt.Println("n == ",n)
err = c.Close()
if err != nil {
panic(err)
}
fmt.Println("end")
})