Транспорт CONNECT в Akka HTTP для HTTPS-запросов
Подключите прокси-транспорт к настройкам пула соединений и передайте эти настройки запросу, которому нужен туннель.
Для HTTPS-запроса в Akka HTTP настройте транспорт клиента так, чтобы CONNECT устанавливался через forward proxy:
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 и сохраняет обычный жизненный цикл потока и response-entity. Используйте или отбросьте возвращённый response entity, чтобы соединение можно было освободить.
Имя httpsProxy здесь означает установление HTTPS-соединения с пунктом назначения через HTTP CONNECT proxy. Это не указание открывать TLS-сеанс с самим listener прокси.
Передайте настроенные параметры в запрос или пул, который отправляет трафик. Создание настроек рядом с вызовом, использующим другую конфигурацию пула, не меняет этот вызов.
Akka документирует этот транспорт для HTTPS-запросов. Сохраняйте пункт назначения как его настоящий HTTPS URI. HTTP-endpoint из списка HTTP-прокси является кандидатом для транспорта, когда он разрешает нужный пункт назначения CONNECT. Пример bindFlow forwarding на стороне сервера создаёт другой HTTP-сервис и отвечает на другую задачу построения.