Http 客户端

预计阅读时间: 2 分钟

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

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

目录:

Call:Request 与 Response

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

并发

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

顺序请求:

suspend fun sequentialRequests() {
    val client = HttpClient(Apache)
    
    // 获取一个 URL 的内容。
    val bytes1 = client.call("https://127.0.0.1:8080/a").response.readBytes() // 挂起点。
    
    // 完成上一个请求后,获取另一个 URL 的内容。
    val bytes2 = client.call("https://127.0.0.1:8080/b").response.readBytes() // 挂起点。

    client.close()
}

并行请求:

suspend fun parallelRequests() = coroutineScope<Unit> {
    val client1 = HttpClient(Apache)
    val client2 = HttpClient(Apache)
    
    // 异步启动两个请求。
    val req1 = async { client1.call("https://127.0.0.1:8080/a").response.readBytes() }
    val req2 = async { client2.call("https://127.0.0.1:8080/b").response.readBytes() }
    
    // 获取请求内容而不阻塞线程,只是挂起该函数直到两个
    // 请求都完成。
    val bytes1 = req1.await() // 挂起点。
    val bytes2 = req2.await() // 挂起点。

    client2.close()
    client1.close()
}

示例

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

特性

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