Skip to content

创建与配置客户端

在添加 客户端依赖项 后,您可以通过创建 HttpClient 类实例并传递 engine 作为参数来实例化客户端:

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

val client = HttpClient(CIO)

在此示例中,我们使用了 CIO 引擎。 您也可以省略引擎:

kotlin
import io.ktor.client.*

val client = HttpClient()

在这种情况下,客户端将根据 构建脚本中添加 的工件自动选择引擎。您可以从 默认引擎 文档部分了解客户端如何选择引擎。

配置客户端

基本配置

要配置客户端,您可以向客户端构造函数传递一个额外的函数式参数。 HttpClientConfig 类是配置客户端的基类。 例如,您可以使用 expectSuccess 属性启用 响应验证

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

val client = HttpClient(CIO) {
    expectSuccess = true
}

引擎配置

您可以使用 engine 函数来配置引擎:

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

val client = HttpClient(CIO) {
    engine {
        // 配置引擎
    }
}

有关更多详细信息,请参阅 引擎 部分。

插件

要安装插件,您需要将其传递给 客户端配置块 内部的 install 函数。例如,您可以通过安装 Logging 插件来记录 HTTP 调用:

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

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

您还可以在 install 块内部配置插件。例如,对于 Logging 插件,您可以指定日志记录器、日志级别以及过滤日志消息的条件:

kotlin
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 }
    }
}

请注意,特定插件可能需要单独的 依赖项

使用客户端

添加 了所有必需的依赖项并创建客户端后,您可以使用它来 发起请求接收响应

关闭客户端

在完成 HTTP 客户端的工作后,您需要释放资源:线程、连接以及用于协程的 CoroutineScope。为此,请调用 HttpClient.close 函数:

kotlin
client.close()

请注意,close 函数会禁止创建新请求,但不会终止当前活动的请求。只有在所有客户端请求完成后,资源才会被释放。

如果您需要为单个请求使用 HttpClient,请调用 use 函数,它会在执行完代码块后自动调用 close

kotlin
val status = HttpClient().use { client ->
    // ...
}

请注意,创建 HttpClient 的开销并不小,在进行多次请求的情况下,最好复用其实例。