1 回答

TA貢獻(xiàn)1982條經(jīng)驗(yàn) 獲得超2個(gè)贊
正如 的Hijacker
文檔所說
劫持讓呼叫者接管連接。在調(diào)用 Hijack 之后,HTTP 服務(wù)器庫將不會對連接執(zhí)行任何其他操作。
管理和關(guān)閉連接成為呼叫者的責(zé)任。
返回的 net.Conn 可能已經(jīng)設(shè)置了讀取或?qū)懭氲淖詈笃谙?,具體取決于服務(wù)器的配置。調(diào)用者有責(zé)任根據(jù)需要設(shè)置或清除這些截止日期。
返回的 bufio.Reader 可能包含來自客戶端的未處理的緩沖數(shù)據(jù)。
調(diào)用 Hijack 后,不得使用原始 Request.Body。原始 Request 的 Context 保持有效并且不會被取消,直到 Request 的 ServeHTTP 方法返回。
您需要寫信給c
而不是buf
. 并且您需要編寫響應(yīng)狀態(tài)和Content-Length
標(biāo)題。
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")
})
- 1 回答
- 0 關(guān)注
- 232 瀏覽
添加回答
舉報(bào)