Client Plugin
內容編碼
必要相依性:io.ktor:ktor-client-encoding
程式碼範例: client-content-encoding
Ktor 用戶端提供 ContentEncoding 外掛程式,允許您啟用指定的壓縮演算法(例如 gzip 和 deflate)並配置其設定。
此外掛程式提供以下功能性:
- 使用指定的品質值設定
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標頭會自動新增。
有關處理回應的更多詳細資訊,請參閱接收回應。
