登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-21 18:12:37 158浏览 收藏

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《我想在golang中使用劫持,但在客户端上得到无效响应》就很适合你!本篇内容主要包括##content_title##,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

我想在golang中使用劫持,但在客户端收到无效响应

496635538​​772

按照服务器上打印的内容:

start

true

n ==  5

end

但我在客户端上遇到以下错误

本地主机发送了无效的响应。 err_invalid_http_response


解决方案


正如 hijacker 的文档所述

劫持让调用者接管连接。之后 调用劫持 http 服务器库是行不通的 与连接有关的任何其他内容。
管理和关闭成为调用者的责任 连接。
返回的 net.conn 可能已设置读取或写入截止日期, 取决于服务器的配置。它是 呼叫者有责任设定或清除这些截止日期 根据需要。
返回的 bufio.reader 可能包含来自以下未处理的缓冲数据 客户。
调用 hijack 后,不得使用原始 request.body。这 原始请求的上下文仍然有效并且不会被取消,直到 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")
})

好了,本文到此结束,带大家了解了《我想在golang中使用劫持,但在客户端上得到无效响应》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>