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