Kotlin HTTP 客户端:从 A 到 Z 正确发出请求

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Kotlin HTTP 客户端:从 A 到 Z 正确发出请求

\n

现代 Kotlin 开发离不开与远程服务器的交互。无论是 Android 移动应用还是基于 Ktor 的服务器端解决方案,HTTP 请求都是数据交换的基础。在本文中,我们将探讨如何使用最佳实践、流行的库以及现代的协程方法来创建 Kotlin HTTP 客户端。您将学习如何发出 GET 和 POST 请求、处理错误、处理 JSON 以及构建可靠的网络层架构。

\n\n

为什么 Kotlin 是 HTTP 客户端的理想选择?

\n

Kotlin 提供了简洁的语法、空安全(null safety)以及与 Java 生态系统的完全兼容性。得益于协程(coroutines),异步请求变得直观易懂,无需繁琐的回调。您可以编写顺序执行的代码,而它实际上是异步运行的——这大大简化了阅读和调试。此外,Kotlin 在 Android 开发中被广泛使用,而网络请求是日常任务。

\n\n

Kotlin 中主要的 HTTP 库

\n

目前,最流行的有三种方法:

\n
    \n
  • Ktor Client — JetBrains 开发的跨平台客户端。支持 JVM、Android、iOS、JS 和 Native。非常适合需要统一代码库的项目。
  • \n
  • OkHttp + Retrofit — Android/JVM 的经典技术栈。OkHttp 负责底层网络操作,而 Retrofit 生成类型化接口。
  • \n
  • Fuel — 轻量级库,采用函数式方法。适合小型项目。
  • \n
\n

在本文中,我们将重点介绍 Ktor 和 OkHttp,因为它们覆盖了 90% 的场景。

\n\n

项目设置与首次请求

\n

首先,添加依赖项。如果您使用 Gradle(Kotlin DSL),请添加 Ktor Client:

\n
dependencies {\n    implementation("io.ktor:ktor-client-core:2.3.7")\n    implementation("io.ktor:ktor-client-cio:2.3.7") // CIO 引擎\n    implementation("io.ktor:ktor-client-content-negotiation:2.3.7")\n    implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.7")\n}
\n

OkHttp 的依赖项如下:

\n
dependencies {\n    implementation("com.squareup.okhttp3:okhttp:4.12.0")\n    implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")\n    implementation("com.google.code.gson:gson:2.10.1")\n}
\n\n

使用 Ktor Client 发送 GET 请求

\n

创建一个简单的客户端并向公共 API 发送 GET 请求:

\n
import io.ktor.client.*\nimport io.ktor.client.request.*\nimport io.ktor.client.statement.*\n\nsuspend fun fetchData(): String {\n    val client = HttpClient()\n    val response: HttpResponse = client.get("https://jsonplaceholder.typicode.com/posts/1")\n    val body = response.bodyAsText()\n    client.close()\n    return body\n}\n\n// 在协程中使用\nfun main() = runBlocking {\n    println(fetchData())\n}
\n

请注意:suspend 是 Kotlin 中用于挂起函数的关键字。这允许在不阻塞线程的情况下执行请求。

\n\n

使用 OkHttp 发送 GET 请求

\n

类似的 OkHttp 示例如下:

\n
import okhttp3.OkHttpClient\nimport okhttp3.Request\n\nfun fetchDataSync(): String {\n    val client = OkHttpClient()\n    val request = Request.Builder()\n        .url("https://jsonplaceholder.typicode.com/posts/1")\n        .build()\n    client.newCall(request).execute().use { response ->\n        return response.body?.string() ?: "错误"\n    }\n}\n\n// 在普通线程中调用(阻塞式)\nfun main() {\n    println(fetchDataSync())\n}
\n

OkHttp 默认是同步的,但可以通过 suspendCancellableCoroutine 轻松适配协程。

\n\n

POST 请求与 JSON 处理

\n

发送数据是第二个最重要的操作。让我们看看如何发送 JS

博客

书籍推荐