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