客户端插件
许多应用程序需要不属于核心应用逻辑的常见功能,例如 日志、序列化 或 授权。在 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/")
}
}创建自定义插件
如果现有插件无法满足您的需求,您可以创建自己的自定义客户端插件。自定义插件允许您拦截请求和响应,并实现可重用的行为。
要了解更多信息,请参阅自定义客户端插件。
