Для 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-сервіс і відповідає на іншу задачу побудови.

Схожі статті