1 回答

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可以劫持連接以訪問(wèn)底層的 tcp 連接。它由 golang 中的標(biāo)準(zhǔn) http 服務(wù)器支持。
以下是文檔中的示例。您可以直接調(diào)用并返回,而不是像本例
中那樣做,這將斷開(kāi)連接。defer conn.Close()conn.Close()
請(qǐng)記住,此時(shí)連接已被接受。如果你甚至不想接受連接,你需要實(shí)現(xiàn)一個(gè)自定義的 tcp 偵聽(tīng)器,有條件地將流量路由到你的 http 服務(wù)器。您還必須考慮您的情況?;蛘呃纾欠裥枰獜?http 請(qǐng)求中讀取任何內(nèi)容以確定您的條件的結(jié)果?
http.HandleFunc("/hijack", func(w http.ResponseWriter, r *http.Request) {
hj, ok := w.(http.Hijacker)
if !ok {
http.Error(w, "webserver doesn't support hijacking", http.StatusInternalServerError)
return
}
conn, bufrw, err := hj.Hijack()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
// Don't forget to close the connection:
defer conn.Close()
bufrw.WriteString("Now we're speaking raw TCP. Say hi: ")
bufrw.Flush()
s, err := bufrw.ReadString('\n')
if err != nil {
log.Printf("error reading string: %v", err)
return
}
fmt.Fprintf(bufrw, "You said: %q\nBye.\n", s)
bufrw.Flush()
})
完整文檔: https ://pkg.go.dev/net/http#Hijacker
- 1 回答
- 0 關(guān)注
- 119 瀏覽
添加回答
舉報(bào)