Anslut Autobahn Twisted WSS genom en HTTP-proxy
Låt connectWS samordna proxy-slutpunkten och den senare TLS:en för målet i stället för att öppna en direkt slutpunkt bredvid en proxy-medveten fabrik.
En Twisted-slutpunkt utför TCP-anslutningen. En WebSocket-fabrik som är konfigurerad att förhandla en proxy behöver fortfarande den slutpunkten för att ansluta till förmedlaren.
För en befintlig Autobahn-applikation som använder sin standardhjälpare:
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 är applikationens befintliga WebSocket-protokollklass. Behåll reaktorn och städningen av anslutningen inom den applikationens livscykel. För en offentlig WSS-tjänst som tillåts genom en offentlig förmedlare levererar HTTP-proxylistan kandidater för fabrikens proxyvärd och -port.
För en fabrik konfigurerad med proxy ansluter connectWS TCP till proxyn och behåller målts TLS-kontext för den senare säkra anslutningen. Den omsluter inte inledningsvis den vanliga HTTP-proxyanslutningen i målets TLS.
En anpassad uppsättning av HostnameEndpoint och ClientService måste bevara samma uppdelning: anslut till proxyn först och låt sedan den konfigurerade fabriken förhandla målet och upprätta den nödvändiga TLS:en. Att ansluta slutpunkten direkt till events.example medan fabriken väntar sig ett proxysamtal blandar dessa roller.
WebSocket-URL:en förblir tjänstens verkliga mål. Dess värdnamn ger också TLS-identiteten; att ersätta det med proxyns värdnamn konfigurerar inte den avsedda säkra tjänsten.