Connecter Autobahn Twisted WSS via un proxy HTTP
Laissez connectWS coordonner le point de terminaison du proxy puis le TLS de destination au lieu d'ouvrir un point de terminaison direct à côté d'une fabrique consciente du proxy.
Un point de terminaison Twisted effectue la connexion TCP. Une fabrique WebSocket configurée pour négocier un proxy a toujours besoin de ce point de terminaison pour se connecter à l'intermédiaire.
Pour une application Autobahn existante utilisant son assistant standard :
from autobahn.twisted.websocket import WebSocketClientFactory, connectWS
from twisted.internet import ssl
factory = WebSocketClientFactory(
'wss://events.example/channel',
proxy={'host': 'proxy.example', 'port': 8080},
)
factory.protocol = ApplicationProtocol
connector = connectWS(
factory,
contextFactory=ssl.optionsForClientTLS('events.example'),
timeout=10,
)
ApplicationProtocol est la classe de protocole WebSocket existante de l'application. Conservez le reactor et le nettoyage de la connexion dans le cycle de vie de cette application. Pour un service WSS public autorisé via un intermédiaire public, la liste de proxies HTTP fournit des candidats pour l'hôte et le port du proxy de la fabrique.
Pour une fabrique configurée avec un proxy, connectWS connecte le TCP au proxy et conserve le contexte TLS de destination pour la connexion sécurisée ultérieure. Il n'enveloppe pas initialement la connexion HTTP ordinaire du proxy dans le TLS de destination.
Un agencement personnalisé de HostnameEndpoint et ClientService doit préserver la même division : se connecter d'abord au proxy, puis laisser la fabrique configurée négocier la cible et établir le TLS requis. Connecter le point de terminaison directement à events.example alors que sa fabrique attend une conversation proxy mélange ces rôles.
L'URL WebSocket reste la véritable destination du service. Son nom d'hôte fournit aussi l'identité TLS ; le remplacer par le nom d'hôte du proxy ne configure pas le service sécurisé prévu.