Akka HTTP 用于 HTTPS 请求的 CONNECT 传输
把代理传输挂到连接池设置上,再把该设置传给需要隧道的请求。
对于 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 服务,回答的是另一个构建问题。