Skip to content

客户端插件

许多应用程序需要不属于核心应用逻辑的常见功能,例如 日志序列化授权。在 Ktor 中,这些功能由客户端插件(plugins)提供。

添加插件依赖项

某些插件需要额外的依赖项。例如,要使用 Logging 插件,您需要在构建脚本中添加 ktor-client-logging 构件:

Kotlin
Groovy
XML

每个插件的文档都会说明其所需的任何依赖项。

安装插件

要安装插件,请将其传递给客户端配置块中的 install() 函数。

例如,安装 Logging 插件如下所示:

kotlin
import io.ktor.client.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.logging.*

val client = HttpClient(CIO) {
    install(Logging)
}

安装或替换插件

在某些情况下,插件可能已经安装 —— 例如,通过共享的客户端配置代码安装。在这种情况下,您可以使用 installOrReplace() 函数替换其配置:

kotlin
import io.ktor.client.*
import io.ktor.client.engine.cio.*

val client = HttpClient(CIO) {
    installOrReplace(ContentNegotiation) {
        // ...
    }
}

此函数会在插件不存在时进行安装,或者在插件已经安装时替换其现有配置。

配置插件

大多数插件都会公开可在 install 块内设置的配置选项。

例如,Logging 插件允许您指定记录器、日志级别以及用于过滤日志消息的条件:

kotlin
package com.example

import io.ktor.client.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.logging.*
import io.ktor.client.request.*
import io.ktor.client.statement.*
import io.ktor.http.*
import kotlinx.coroutines.runBlocking

fun main() {
    runBlocking {
        val client = HttpClient(CIO) {
            install(Logging) {
                logger = Logger.DEFAULT
                level = LogLevel.HEADERS
                filter { request ->
                    request.url.host.contains("ktor.io")
                }
                sanitizeHeader { header -> header == HttpHeaders.Authorization }
            }
        }

        val response1: HttpResponse = client.get("https://ktor.io/")
        val response2: HttpResponse = client.get("https://jetbrains.com/")
    }
}

创建自定义插件

如果现有插件无法满足您的需求,您可以创建自己的自定义客户端插件。自定义插件允许您拦截请求和响应,并实现可重用的行为。

要了解更多信息,请参阅自定义客户端插件