Http 客户端

预计阅读时间: 2 分钟

除了 HTTP 服务外,Ktor 还包含一个灵活的异步 HTTP 客户端。 这个客户端支持多个可配置的引擎,并且有自己的一组特性

其主要功能由 io.ktor:ktor-client-core:$ktor_version 构件提供。 而每个引擎都在单独的构件中提供。

目录:

Call:Request 与 Response

可以在相应的章节中查看如何发出请求, 以及如何接收响应

并发

请记住,请求是异步的,但是当执行请求时,该 API 会挂起后续请求, 并且所在函数会被挂起,直到请求完成。如果想要在同一块中一次执行多个请求,可以使用 launchasync 函数,之后获取各个结果。 例如:

顺序请求

suspend fun sequentialRequests() {
    val client = HttpClient()

    // 获取一个 URL 的内容。
    val firstBytes = client.get<ByteArray>("https://127.0.0.1:8080/a")

    // 完成上一个请求后,获取另一个 URL 的内容。
    val secondBytes = client.get<ByteArray>("https://127.0.0.1:8080/b")

    client.close()
}

并行请求

suspend fun parallelRequests() = coroutineScope<Unit> {
    val client = HttpClient()

    // 异步启动两个请求。
    val firstRequest = async { client.get<ByteArray>("https://127.0.0.1:8080/a") }
    val secondRequest = async { client.get<ByteArray>("https://127.0.0.1:8080/b") }

    // 获取请求内容而不阻塞线程,只是挂起该函数直到两个
    // 请求都完成。
    val bytes1 = firstRequest.await() // 挂起点。
    val bytes2 = secondRequest.await() // 挂起点。

    client.close()
}

示例

更多相关信息,请查看示例页及一些示例。

特性

更多相关信息,请查看特性页以及所有可用特性。