Skip to content

クライアントの作成と設定

クライアントの依存関係を追加した後、HttpClientクラスのインスタンスを作成し、パラメータとしてエンジンを渡すことで、クライアントをインスタンス化できます。

kotlin
import io.ktor.client.*
import io.ktor.client.engine.cio.*

val client = HttpClient(CIO)

この例では、CIOエンジンを使用しています。 エンジンを省略することも可能です。

kotlin
import io.ktor.client.*

val client = HttpClient()

この場合、クライアントはビルドスクリプトに追加されたアーティファクトに応じて自動的にエンジンを選択します。クライアントがどのようにエンジンを選択するかについては、デフォルトエンジンのドキュメントセクションを参照してください。

クライアントの設定

基本設定

クライアントを設定するには、クライアントのコンストラクタに追加の関数パラメータを渡すことができます。 HttpClientConfigクラスは、クライアントを設定するためのベースクラスです。 例えば、expectSuccessプロパティを使用してレスポンスの検証を有効にできます。

kotlin
import io.ktor.client.*
import io.ktor.client.engine.cio.*

val client = HttpClient(CIO) {
    expectSuccess = true
}

エンジンの設定

engine関数を使用してエンジンを設定できます。

kotlin
import io.ktor.client.*
import io.ktor.client.engine.cio.*

val client = HttpClient(CIO) {
    engine {
        // エンジンの設定
    }
}

詳細については、エンジンのセクションを参照してください。

プラグイン

プラグインをインストールするには、クライアント設定ブロック内のinstall関数にプラグインを渡す必要があります。例えば、LoggingプラグインをインストールすることでHTTPコールをログに記録できます。

kotlin
import io.ktor.client.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.logging.*

val client = HttpClient(CIO) {
    install(Logging)
}

また、installブロック内でプラグインを設定することも可能です。例えば、Loggingプラグインの場合、ロガー、ログレベル、およびログメッセージをフィルタリングするための条件を指定できます。

kotlin
val client = HttpClient(CIO) {
    install(Logging) {
        logger = Logger.DEFAULT
        level = LogLevel.HEADERS
        filter { request ->
            request.url.host.contains("ktor.io")
        }
        sanitizeHeader { header -> header == HttpHeaders.Authorization }
    }
}

特定のプラグインには個別の依存関係が必要になる場合があることに注意してください。

クライアントの使用

必要なすべての依存関係を追加し、クライアントを作成した後は、それを使用してリクエストを送信し、レスポンスを受信できます。

クライアントのクローズ

HTTPクライアントでの作業を終了した後は、スレッド、コネクション、およびコルーチン用のCoroutineScopeなどのリソースを解放する必要があります。これを行うには、HttpClient.close関数を呼び出します。

kotlin
client.close()

close関数は新しいリクエストの作成を禁止しますが、現在アクティブなリクエストを終了させるわけではないことに注意してください。リソースは、すべてのクライアントリクエストが完了した後にのみ解放されます。

単一のリクエストに対してHttpClientを使用する必要がある場合は、use関数を呼び出します。これにより、コードブロックの実行後に自動的にcloseが呼び出されます。

kotlin
val status = HttpClient().use { client ->
    // ...
}

HttpClientの作成は低コストな操作ではないため、複数のリクエストを行う場合はそのインスタンスを再利用することをお勧めします。