HTTPプロキシエージェント経由でNodeのwsクライアントを接続する
HttpsProxyAgentをNodeのwsコンストラクターに渡し、WebSocketハンドシェイクをフォワードプロキシ経由にする。
Nodeのwsパッケージは、接続オプションでHTTPエージェントを受け付けます。フォワードプロキシには、ESモジュールの断片でHttpsProxyAgentを使えます。
import WebSocket from 'ws';
import { HttpsProxyAgent } from 'https-proxy-agent';
const agent = new HttpsProxyAgent('http://proxy.example.net:8080');
const socket = new WebSocket('wss://socket.example.net/events', {
agent,
});
socket.on('error', error => {
console.error(error.message);
});
これは両方のパッケージがすでにアプリケーションの一部であることを前提とします。WebSocketのURLはサービスを選び、エージェントのURLはプロキシを選びます。HTTPプロキシ一覧のHTTPアドレスは、プロキシの認証情報なしで許可された公開WSSテストに使うエージェントURLを埋められます。実際のサービスエンドポイントへの到達を確認してください。
HttpsProxyAgentはHTTP CONNECTトンネルを確立し、接続済みのトランスポートをクライアントに渡します。WebSocket接続とHTTPSリクエストの両方に対応するため、アプリケーションがCONNECTのやり取りを自前で組み立てる必要はありません。
アプリケーション通常のopen、message、closeの処理をそのまま続けます。openイベントは選択した経路でWebSocketハンドシェイクが完了したことを示します。JavaScriptオブジェクトを作っただけでは完了していません。