Skip to content

プロキシ

Ktor HTTPクライアントでは、マルチプラットフォームプロジェクトでプロキシ設定を構成できます。 サポートされているプロキシのタイプは、HTTPSOCKSの2種類です。

サポートされているエンジン

以下の表は、特定のエンジンでサポートされているプロキシタイプを示しています。

エンジンHTTPプロキシSOCKSプロキシ
Apache✖️
Java✖️
Jetty✖️✖️
CIO✖️
Android
OkHttp
JavaScript✖️✖️
Darwin
Curl

Darwinエンジンでは、現在HTTPプロキシを使用したHTTPSリクエストはサポートされていないことに注意してください。

依存関係の追加

クライアントでプロキシを構成するために、特定の依存関係を追加する必要はありません。必要な依存関係は以下の通りです。

プロキシの構成

プロキシ設定を構成するには、クライアント構成ブロック内でengine関数を呼び出し、proxyプロパティを使用します。 このプロパティは、ProxyBuilderファクトリを使用して作成できるProxyConfigインスタンスを受け取ります。

kotlin
val client = HttpClient() {
    engine {
        proxy = // プロキシ構成を作成する
    }
}

HTTPプロキシ

以下の例は、ProxyBuilderを使用してHTTPプロキシを構成する方法を示しています。

kotlin
val client = HttpClient() {
    engine {
        proxy = ProxyBuilder.http("http://sample-proxy-server:3128/")
    }
}

JVMでは、ProxyConfigProxyクラスにマップされるため、以下のようにプロキシを構成できます。

kotlin
val client = HttpClient() {
    engine {
        proxy = Proxy(Proxy.Type.HTTP, InetSocketAddress("sample-proxy-server", 3128))
    }
}

SOCKSプロキシ

以下の例は、ProxyBuilderを使用してSOCKSプロキシを構成する方法を示しています。

kotlin
val client = HttpClient() {
    engine {
        proxy = ProxyBuilder.socks(host = "sample-proxy-server", port = 1080)
    }
}

HTTPプロキシと同様に、JVMではProxyを使用してプロキシ設定を構成できます。

kotlin
val client = HttpClient() {
    engine {
        proxy = Proxy(Proxy.Type.SOCKS, InetSocketAddress("sample-proxy-server", 1080))
    }
}

プロキシの認証と認可

プロキシの認証と認可はエンジン固有であり、手動で処理する必要があります。 例えば、基本認証(Basic authentication)を使用してKtorクライアントをHTTPプロキシサーバーに対して認証するには、以下のように各リクエストProxy-Authorizationヘッダーを追加します。

kotlin
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 システムプロパティを使用できます。