当前位置: > > > > 我想在golang中使用劫持,但在客户端上得到无效响应
来源:stackoverflow
2024-04-21 18:12:37
0浏览
收藏
在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《我想在golang中使用劫持,但在客户端上得到无效响应》就很适合你!本篇内容主要包括##content_title##,希望对大家的知识积累有所帮助,助力实战开发!
问题内容
我想在golang中使用劫持,但在客户端收到无效响应
496635538772
按照服务器上打印的内容:
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知识!