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 = // Create proxy configuration
    }
}

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))
    }
}

プロキシの認証と認可

プロキシの認証と認可はエンジン固有であり、手動で処理する必要があります。例えば、基本認証を使用して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.usernamejava.net.socks.passwordシステムプロパティを使用できます。