Skip to content
Client Plugin

內容編碼

必要相依性io.ktor:ktor-client-encoding

程式碼範例 client-content-encoding

Ktor 用戶端提供 ContentEncoding 外掛程式,允許您啟用指定的壓縮演算法(例如 gzipdeflate)並配置其設定。

此外掛程式提供以下功能性:

  • 使用指定的品質值設定 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 標頭)。

下面的範例展示了如何以自訂品質值啟用 deflategzip 編碼器:

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 標頭會自動新增。

有關處理回應的更多詳細資訊,請參閱接收回應