Gorilla WebSocket: HTTP CONNECT uchun Dialer.Proxy sozlang
Muqobil TCP manzilini tugallangan proxy tunnel deb hisoblash o'rniga, HTTP forward proxy uchun Dialer.Proxy sozlang.
HTTP forward proxy uchun Gorilla Dialer.Proxy'sini sozlang. WebSocket URL manzil bo'lib qoladi:
proxyURL, err := url.Parse("http://proxy.example:8080")
if err != nil {
return err
}
dialer := websocket.Dialer{
Proxy: http.ProxyURL(proxyURL),
HandshakeTimeout: 15 * time.Second,
}
conn, response, err := dialer.DialContext(
ctx, "wss://events.example/stream", nil)
Bu fragment ilovaning ulanish funksiyasida bo'lib, net/url, net/http, time va github.com/gorilla/websocket mavjud bo'ladi. err va muvaffaqiyatsiz handshake javobini ishlang, so'ng conn'ni odatiy xabar va yopish hayot tsikli orqali boshqaring. Ruxsat etilgan ommaviy WSS so'nggi nuqtasi uchun HTTP proxy ro'yxati proxyURL uchun nomzodlar beradi.
HTTP proxy dialer vositachi ulanishni ochadi va manzil uchun CONNECT yuboradi. wss uchun manzilning TLS'i WebSocket handshake oldidan o'rnatilgan tunneldan o'tadi.
NetDialContext quyi darajadagi TCP ulanishini moslashtiradi. Uni faqat proxy portiga yo'naltirish CONNECT'ni amalga oshirmaydi. Proxy ham sozlangan bo'lsa, maxsus tarmoq callback'i vositachi bilan bog'lanadi, proxy qatlami esa muzokaralarni olib boradi.
Manzilning host nomini wss URL'da saqlang, shunda odatiy TLS identifikatsiya tekshiruvi mo'ljallangan serverga qo'llaniladi.