Twisted 엔드포인트가 TCP 연결을 수행합니다. 프록시 협상을 구성한 WebSocket 팩토리라도 중간자에 연결하려면 해당 엔드포인트가 필요합니다.

표준 헬퍼를 사용하는 기존 Autobahn 애플리케이션의 경우:

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은 애플리케이션의 기존 WebSocket 프로토콜 클래스입니다. 리액터와 연결 정리를 해당 애플리케이션의 수명 주기 안에 두십시오. 공용 중간자를 통해 허용되는 공용 WSS 서비스의 경우 HTTP 프록시 목록이 팩토리의 프록시 호스트와 포트 후보를 제공합니다.

프록시용으로 구성된 팩토리에서는 connectWS가 TCP를 프록시에 연결하고 이후의 보안 연결을 위해 대상 TLS 컨텍스트를 유지합니다. 처음부터 일반 HTTP 프록시 연결을 대상 TLS로 감싸지는 않습니다.

사용자 지정 HostnameEndpoint와 ClientService 구성은 같은 분담을 유지해야 합니다. 먼저 프록시에 연결한 다음 구성된 팩토리가 대상을 협상하고 필요한 TLS를 수립하게 하십시오. 팩토리가 프록시 대화를 기대하는데 엔드포인트를 events.example에 직접 연결하면 그 역할이 뒤섞입니다.

WebSocket URL은 실제 서비스 대상으로 남습니다. 그 호스트 이름은 TLS 신원도 제공합니다. 이를 프록시 호스트 이름으로 바꾸면 의도한 보안 서비스가 구성되지 않습니다.

관련 글