Pour un proxy HTTP de transfert, configurez le Dialer.Proxy de Gorilla. L’URL WebSocket reste la destination :

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)

Ce fragment appartient à la fonction de connexion de l’application, avec net/url, net/http, time et github.com/gorilla/websocket disponibles. Traitez err et toute réponse de handshake échouée, puis gérez conn via le cycle de vie normal des messages et de la fermeture. Pour un point de terminaison WSS public autorisé, la liste de proxys HTTP fournit des candidats pour proxyURL.

Le dialer du proxy HTTP ouvre la connexion intermédiaire et envoie CONNECT pour la destination. Pour wss, le TLS de destination passe par le tunnel établi avant le handshake WebSocket.

NetDialContext personnalise la connexion TCP de niveau inférieur. Le pointer seulement vers un port de proxy n’implémente pas CONNECT. Lorsque Proxy est aussi défini, le rappel réseau personnalisé contacte l’intermédiaire, tandis que la couche proxy gère la négociation.

Conservez le nom d’hôte de destination dans l’URL wss afin que la vérification normale d’identité TLS s’applique au serveur prévu.

Articles similaires