プロキシ
Ktor HTTPクライアントでは、マルチプラットフォームプロジェクトでプロキシ設定を構成できます。 サポートされているプロキシのタイプは、HTTPとSOCKSの2種類です。
サポートされているエンジン
以下の表は、特定のエンジンでサポートされているプロキシタイプを示しています。
| エンジン | HTTPプロキシ | SOCKSプロキシ |
|---|---|---|
| Apache | ✅ | ✖️ |
| Java | ✅ | ✖️ |
| Jetty | ✖️ | ✖️ |
| CIO | ✅ | ✖️ |
| Android | ✅ | ✅ |
| OkHttp | ✅ | ✅ |
| JavaScript | ✖️ | ✖️ |
| Darwin | ✅ | ✅ |
| Curl | ✅ | ✅ |
Darwinエンジンでは、現在HTTPプロキシを使用したHTTPSリクエストはサポートされていないことに注意してください。
依存関係の追加
クライアントでプロキシを構成するために、特定の依存関係を追加する必要はありません。必要な依存関係は以下の通りです。
プロキシの構成
プロキシ設定を構成するには、クライアント構成ブロック内でengine関数を呼び出し、proxyプロパティを使用します。 このプロパティは、ProxyBuilderファクトリを使用して作成できるProxyConfigインスタンスを受け取ります。
val client = HttpClient() {
engine {
proxy = // プロキシ構成を作成する
}
}HTTPプロキシ
以下の例は、ProxyBuilderを使用してHTTPプロキシを構成する方法を示しています。
val client = HttpClient() {
engine {
proxy = ProxyBuilder.http("http://sample-proxy-server:3128/")
}
}JVMでは、ProxyConfigはProxyクラスにマップされるため、以下のようにプロキシを構成できます。
val client = HttpClient() {
engine {
proxy = Proxy(Proxy.Type.HTTP, InetSocketAddress("sample-proxy-server", 3128))
}
}SOCKSプロキシ
以下の例は、ProxyBuilderを使用してSOCKSプロキシを構成する方法を示しています。
val client = HttpClient() {
engine {
proxy = ProxyBuilder.socks(host = "sample-proxy-server", port = 1080)
}
}HTTPプロキシと同様に、JVMではProxyを使用してプロキシ設定を構成できます。
val client = HttpClient() {
engine {
proxy = Proxy(Proxy.Type.SOCKS, InetSocketAddress("sample-proxy-server", 1080))
}
}プロキシの認証と認可
プロキシの認証と認可はエンジン固有であり、手動で処理する必要があります。 例えば、基本認証(Basic authentication)を使用してKtorクライアントをHTTPプロキシサーバーに対して認証するには、以下のように各リクエストにProxy-Authorizationヘッダーを追加します。
val client = HttpClient() {
defaultRequest {
val credentials = Base64.getEncoder().encodeToString("jetbrains:foobar".toByteArray())
header(HttpHeaders.ProxyAuthorization, "Basic $credentials")
}
}JVM上のSOCKSプロキシに対してKtorクライアントを認証するには、java.net.socks.usernameおよびjava.net.socks.password システムプロパティを使用できます。
