Для прямого HTTP-проксі налаштуйте Dialer.Proxy у Gorilla. URL WebSocket залишається пунктом призначення:

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)

Цей фрагмент належить до функції підключення застосунку, де доступні net/url, net/http, time і github.com/gorilla/websocket. Обробіть err і будь-яку невдалу відповідь handshake, потім керуйте conn через звичайний життєвий цикл повідомлень і закриття. Для дозволеної публічної кінцевої точки WSS список HTTP-проксі надає кандидатів для proxyURL.

Діалер HTTP-проксі відкриває проміжне з'єднання й надсилає CONNECT для пункту призначення. Для wss TLS пункту призначення проходить через встановлений тунель до handshake WebSocket.

NetDialContext налаштовує нижче TCP-з'єднання. Спрямування лише на порт проксі не реалізує CONNECT. Якщо Proxy також задано, користувацький мережевий callback з'єднується з посередником, а рівень проксі веде переговори.

Зберігайте ім'я хоста пункту призначення в URL wss, щоб звичайна перевірка ідентичності TLS застосовувалася до потрібного сервера.

Схожі статті