Для прямого 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 применялась к нужному серверу.

Похожие статьи