Client Plugin
コンテンツエンコーディング
必要な依存関係: io.ktor:ktor-client-encoding
コード例: client-content-encoding
Ktorクライアントは、指定した圧縮アルゴリズム(gzipやdeflateなど)を有効にし、その設定を構成できるようにするContentEncodingプラグインを提供します。
このプラグインは以下の機能を提供します:
- 指定された品質値(quality value)を使用して
Accept-Encodingヘッダーを設定します。 - 必要に応じてリクエストボディをエンコードします。
- サーバーから受信したコンテンツをデコードして、オリジナルのペイロードを取得します。
依存関係の追加
ContentEncodingを使用するには、ビルドスクリプトにktor-client-encodingアーティファクトを含める必要があります:
Kotlin
Groovy
XML
TIP
Ktorクライアントに必要なアーティファクトの詳細については、クライアントの依存関係の追加
を参照してください。 既存のプロジェクトにクライアントの依存関係を追加する方法を学びます。
ContentEncodingのインストール
ContentEncodingをインストールするには、クライアント構成ブロック内でinstall関数に渡します:
kotlin
import io.ktor.client.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.compression.*
//...
val client = HttpClient(CIO) {
install(ContentEncoding)
}ContentEncodingの構成
エンコーダーの有効化
どのエンコーダーをサポートするかを構成し、それらの品質値(Accept-Encodingヘッダーで使用)を指定できます。
以下の例は、カスタム品質値を使用してdeflateおよびgzipエンコーダーを有効にする方法を示しています:
kotlin
val client = HttpClient(CIO) {
install(ContentEncoding) {
deflate(1.0F)
gzip(0.9F)
}
}必要に応じて、ContentEncoderインターフェースを実装してカスタムエンコーダーを作成し、それをcustomEncoder()関数を使用して登録できます。
modeプロパティの設定
デフォルトでは、ContentEncodingはレスポンスのデコード(解凍)のみを処理します。modeプロパティを使用して、プラグインの動作を定義できます。
利用可能な値は以下の通りです:
ContentEncodingConfig.Mode.DecompressResponseContentEncodingConfig.Mode.CompressRequestContentEncodingConfig.Mode.Allリクエストボディのエンコード
リクエストの圧縮を有効にするには、modeプロパティを設定し、HttpRequestBuilderブロック内でcompress()関数を使用します。
kotlin
import io.ktor.client.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.compression.*
//...
val client = HttpClient(CIO) {
install(ContentEncoding) {
mode = ContentEncodingConfig.Mode.CompressRequest
gzip()
}
}
client.post("/upload") {
compress("gzip")
setBody(someLongBody)
}この例では:
mode = ContentEncodingConfig.Mode.CompressRequestはリクエストの圧縮を有効にします。gzip()はgzipエンコーダーを登録します。compress("gzip")は、この特定のリクエストにgzip圧縮を適用します。Content-Encodingヘッダーは自動的に追加されます。
レスポンスの処理に関する詳細は、レスポンスの受信を参照してください。
