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 标头会自动添加。

有关处理响应的更多详细信息,请参阅 接收响应