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

我想在 golang 中使用劫持,同时在客户端上得到无效响应

我想在 golang 中使用劫持,同时在客户端上得到无效响应

Go
至尊宝的传说 2023-06-05 09:13:06
我想在 golang 中使用劫持,同时在客户端收到无效响应func hijack(w http.ResponseWriter, r *http.Request) {    fmt.Println("start")    hj, ok := w.(http.Hijacker)    fmt.Println(ok)    c, buf, err := hj.Hijack()    if err != nil {        panic(err)    }    n, err := buf.Write([]byte("hello"))    if err != nil {        panic(err)    }    fmt.Println("n == ",n)    err = buf.Flush()    if err != nil {        panic(err)    }    fmt.Println("end")}按照服务器上打印的:starttruen ==  5end但我在客户端出现以下错误本地主机发送了无效响应。ERR_INVALID_HTTP_RESPONSE
查看完整描述

1 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

正如 的Hijacker文档所说

劫持让呼叫者接管连接。在调用 Hijack 之后,HTTP 服务器库将不会对连接执行任何其他操作。
管理和关闭连接成为呼叫者的责任。
返回的 net.Conn 可能已经设置了读取或写入的最后期限,具体取决于服务器的配置。调用者有责任根据需要设置或清除这些截止日期。
返回的 bufio.Reader 可能包含来自客户端的未处理的缓冲数据。
调用 Hijack 后,不得使用原始 Request.Body。原始 Request 的 Context 保持有效并且不会被取消,直到 Request 的 ServeHTTP 方法返回。

您需要写信给c而不是buf. 并且您需要编写响应状态和Content-Length标题。

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

})


查看完整回答
反对 回复 2023-06-05
  • 1 回答
  • 0 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

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