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标头会自动添加。
有关处理响应的更多详细信息,请参阅 接收响应。
