Een Twisted-eindpunt voert de TCP-verbinding uit. Een WebSocket-factory die is geconfigureerd om een proxy te onderhandelen, heeft dat eindpunt nog steeds nodig om verbinding te maken met de tussenpersoon.

Voor een bestaande Autobahn-applicatie die de standaardhelper gebruikt:

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 is de bestaande WebSocket-protokolklasse van de applicatie. Houd de reactor en het opruimen van de verbinding binnen de levenscyclus van die applicatie. Voor een openbare WSS-dienst die via een openbare tussenpersoon is toegestaan, levert de HTTP-proxylijst kandidaten voor de proxyhost en -poort van de factory.

Voor een factory die met een proxy is geconfigureerd, verbindt connectWS TCP met de proxy en behoudt de TLS-context van de bestemming voor de latere beveiligde verbinding. Het wikkelt de gewone HTTP-proxyverbinding aanvankelijk niet in de TLS van de bestemming.

Een aangepaste opstelling van HostnameEndpoint en ClientService moet dezelfde verdeling behouden: eerst verbinden met de proxy, daarna de geconfigureerde factory het doel laten onderhandelen en de vereiste TLS laten opzetten. Het eindpunt rechtstreeks aan events.example koppelen terwijl de factory een proxygesprek verwacht, vermengt die rollen.

De WebSocket-URL blijft de echte dienstbestemming. De hostnaam ervan levert ook de TLS-identiteit; hem vervangen door de hostnaam van de proxy configureert niet de beoogde beveiligde dienst.

Gerelateerde artikelen