Für einen HTTP-Forward-Proxy konfigurieren Sie Gorillas Dialer.Proxy. Die WebSocket-URL bleibt das Ziel:

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)

Dieses Fragment gehört in die Verbindungsfunktion der Anwendung, wobei net/url, net/http, time und github.com/gorilla/websocket verfügbar sind. Behandeln Sie err und jede fehlgeschlagene Handshake-Antwort, und verwalten Sie conn anschließend über den normalen Lebenszyklus für Nachrichten und Schließen. Für einen zulässigen öffentlichen WSS-Endpunkt liefert die HTTP-Proxy-Liste Kandidaten für proxyURL.

Der HTTP-Proxy-Dialer öffnet die Zwischenverbindung und sendet CONNECT für das Ziel. Bei wss folgt das TLS des Ziels durch den aufgebauten Tunnel vor dem WebSocket-Handshake.

NetDialContext passt die zugrunde liegende TCP-Verbindung an. Allein das Richten auf einen Proxy-Port implementiert kein CONNECT. Ist auch Proxy gesetzt, wählt der benutzerdefinierte Netzwerk-Callback den Vermittler, während die Proxy-Schicht die Aushandlung übernimmt.

Behalten Sie den Ziel-Hostnamen in der wss-URL, damit die normale TLS-Identitätsprüfung für den beabsichtigten Server gilt.

Ähnliche Artikel