Skip to content
Client Plugin

コンテンツエンコーディング

必要な依存関係: io.ktor:ktor-client-encoding

コード例: client-content-encoding

Ktorクライアントは、指定した圧縮アルゴリズム(gzipdeflateなど)を有効にし、その設定を構成できるようにする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.DecompressResponse
<code>ContentEncodingConfig.Mode.DecompressResponse</code> レスポンスのデコードのみを行います。これがデフォルトのモードです。
ContentEncodingConfig.Mode.CompressRequest
<code>ContentEncodingConfig.Mode.CompressRequest</code> リクエストボディの圧縮のみを有効にします。
ContentEncodingConfig.Mode.All
<code>ContentEncodingConfig.Mode.All</code> レスポンスのデコードとリクエストの圧縮の両方を有効にします。

リクエストボディのエンコード

リクエストの圧縮を有効にするには、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ヘッダーは自動的に追加されます。

レスポンスの処理に関する詳細は、レスポンスの受信を参照してください。