Conectarea Autobahn Twisted WSS printr-un proxy HTTP
Lăsați connectWS să coordoneze punctul final al proxy-ului și TLS-ul destinației ulterior în loc să deschidă un punct final direct lângă o fabrică conștientă de proxy.
Un punct final Twisted realizează conexiunea TCP. O fabrică WebSocket configurată să negocieze un proxy are totuși nevoie de acel punct final pentru a se conecta la intermediar.
Pentru o aplicație Autobahn existentă care își folosește helperul 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 este clasa de protocol WebSocket existentă a aplicației. Păstrați reactorul și curățarea conexiunii în ciclul de viață al acelei aplicații. Pentru un serviciu WSS public permis printr-un intermediar public, lista de proxy-uri HTTP oferă candidați pentru gazda și portul proxy al fabricii.
Pentru o fabrică configurată cu proxy, connectWS conectează TCP la proxy și păstrează contextul TLS al destinației pentru conexiunea securizată ulterioară. Nu împachetează inițial conexiunea HTTP obișnuită a proxy-ului în TLS-ul destinației.
O configurare personalizată de HostnameEndpoint și ClientService trebuie să păstreze aceeași împărțire: mai întâi conectarea la proxy, apoi lăsarea fabricii configurate să negocieze ținta și să stabilească TLS-ul necesar. Conectarea punctului final direct la events.example în timp ce fabrica sa așteaptă o conversație prin proxy amestecă aceste roluri.
URL-ul WebSocket rămâne destinația reală a serviciului. Numele său de gazdă oferă și identitatea TLS; înlocuirea lui cu numele de gazdă al proxy-ului nu configurează serviciul securizat dorit.