HTTPI を使う Savon クライアントでは、プロキシはクライアントのオプションに属します。リモート WSDL を取得するときにも、SOAP リクエストを送信するときにも適用されます。

client = Savon.client(
  wsdl: 'https://service.example/soap?wsdl',
  proxy: ENV.fetch('SOAP_PROXY_URL'),
  open_timeout: 5,
  read_timeout: 15
)

この例は HTTPI トランスポートを前提としています。承認済みのプロキシ URL を環境変数から渡します。認証なしの HTTP 中継を許可する公開 SOAP テストでは、HTTP プロキシ一覧の候補がその URL を提供できます。サービス認証とプロキシ認証の判断は分けてください。対応する認証方式が URL 内の資格情報を使う場合は、その資格情報の予約文字をエンコードし、生成した URL をログに残さないようにします。

Savon はこれを「グローバルオプション」と呼びますが、実際にはクライアントインスタンス内に限られます。別の場所で生成したクライアントはプロキシを自動的に継承しません。

スニペットを再利用する前に、インストール済みのトランスポートを確認してください。現在の Savon のドキュメントはこれらのオプションを HTTPI に割り当てています。Faraday トランスポートは client.faraday を通じた独自の設定インターフェースを持ち、HTTPI 固有のこれらのオプションを受け付けません。2 つのインターフェースを混ぜず、選択したトランスポートを設定してください。

プロキシのアカウントは SOAP サービスの資格情報や WS-Security の値と分けてください。プロキシの 407、サービスの HTTP ログイン要求、SOAP フォールトはそれぞれ別のやり取りを示します。WSDL の取得は、クライアントがアプリケーション操作を一度も行う前に失敗することがあります。

関連記事