Akka Http 使用 Java 的 java.net.ProxySelector
接口来处理代理设置。这意味着它会遵守 jvmproxy 环境变量和 Java 系统属性的设置。
下面是一个示例代码,它将使用 jvmproxy 环境变量来设置代理:
import java.net.ProxySelector
import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.model.Uri
import akka.http.scaladsl.settings.ClientConnectionSettings
import akka.stream.ActorMaterializer
import akka.stream.scaladsl.{Sink, Source}
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
object Main extends App {
implicit val system = ActorSystem("my-system")
implicit val materializer = ActorMaterializer()
// Set the default proxy selector to use the JVM proxy settings
ProxySelector.setDefault(ProxySelector.getDefault)
val connectionSettings = ClientConnectionSettings(system).withProxy(Uri("http://proxy.example.com:3128"))
val responseFuture: Future[String] =
Source.single("http://example.com")
.mapAsync(1)(url => Http().singleRequest(Http().get(url), connectionSettings).map(_.entity))
.flatMapConcat(entity => entity.dataBytes.map(_.utf8String).fold("")(_ + _))
.runWith(Sink.head)
responseFuture.foreach(println)
}
在上面的示例中,ProxySelector.setDefault(ProxySelector.getDefault)
将默认的代理选择器设置为使用 jvmproxy 环境变量的设置。然后,ClientConnectionSettings(system).withProxy(Uri("http://proxy.example.com:3128"))
被用来设置代理服务器的地址。
当使用 Akka Http 发送 HTTP 请求时,代理设置将被自动处理。