亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有沒有辦法在不向客戶端發送任何內容的情況下在 golang 中刪除 http 連接?

有沒有辦法在不向客戶端發送任何內容的情況下在 golang 中刪除 http 連接?

Go
一只名叫tom的貓 2022-12-19 10:45:32
在某些情況下,我不想向客戶端響應任何內容,就好像某個端口沒有任何響應一樣,就好像該端口未被使用一樣。示意圖:func handleClient(w http.ResponseWriter, r *http.Request) {    if ( **** condition **** ) {        // Drop connection without sending anything to client    } else {        // Normal response    }    }我將不勝感激任何幫助或線索來負擔得起。
查看完整描述

1 回答

?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

您可以劫持連接以訪問底層的 tcp 連接。它由 golang 中的標準 http 服務器支持。


以下是文檔中的示例。您可以直接調用并返回,而不是像本例

中那樣做,這將斷開連接。defer conn.Close()conn.Close()


請記住,此時連接已被接受。如果你甚至不想接受連接,你需要實現一個自定義的 tcp 偵聽器,有條件地將流量路由到你的 http 服務器。您還必須考慮您的情況?;蛘呃纾欠裥枰獜?http 請求中讀取任何內容以確定您的條件的結果?


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


查看完整回答
反對 回復 2022-12-19
  • 1 回答
  • 0 關注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號