Akka HTTP の HTTPS リクエストでは、クライアントトランスポートを設定して、フォワードプロキシ経由で CONNECT を確立します:

import java.net.InetSocketAddress
import akka.http.scaladsl.{ClientTransport, Http}
import akka.http.scaladsl.model.HttpRequest
import akka.http.scaladsl.settings.ConnectionPoolSettings

val transport = ClientTransport.httpsProxy(
  InetSocketAddress.createUnresolved("proxy.example", 8080))

val settings = ConnectionPoolSettings(system)
  .withConnectionSettings(_.withTransport(transport))

val response = Http().singleRequest(
  HttpRequest(uri = "https://example.com/"),
  settings = settings)

アプリケーションは既存の ActorSystem を system として提供し、通常のストリームとレスポンスエンティティのライフサイクルを維持します。接続を解放できるよう、返されたレスポンスエンティティを適切に消費するか破棄してください。

ここでの httpsProxy という名前は、HTTP CONNECT プロキシ経由で HTTPS 宛先への接続を確立することを指します。プロキシリスナー自体への TLS セッションを開く指示ではありません。

カスタマイズした設定を、トラフィックを送信するリクエストまたはプールに渡します。別のプール構成を使う呼び出しの隣で設定を構築しても、その呼び出しは変更されません。

Akka はこのトランスポートを HTTPS リクエスト向けに文書化しています。宛先は実際の HTTPS URI のままにしてください。HTTP プロキシリストの HTTP エンドポイントは、必要な CONNECT 宛先を許可する場合にこのトランスポートの候補となります。サーバー側の bindFlow 転送の例は別の HTTP サービスを作成し、別の構築上の問題に答えます。

関連記事