Skip to content

创建和配置客户端

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

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

val client = HttpClient(CIO)

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

kotlin
import io.ktor.client.*

val client = HttpClient()

在这种情况下,客户端将根据构建脚本中添加的 artifact 自动选择一个 engine。您可以从默认 engine 文档章节中了解客户端如何选择 engine。

配置客户端

基本配置

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

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

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

引擎配置

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

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

val client = HttpClient(CIO) {
    engine {
        // Configure an 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 并非廉价操作,在处理多个请求时最好重用其实例。