|
OkHttp 是一个流行的 HTTP 客户端库,用于在 Android 和 Java 应用中发送和接收网络请求。下面是一个使用 OkHttp 发送 POST 请求的示例。
首先,确保你的项目中包含了 OkHttp 的依赖。在你的 build.gradle 文件中添加以下依赖:
- dependencies {
- implementation 'com.squareup.okhttp3:okhttp:4.9.3' // 请检查并使用最新版本
- }
复制代码 然后,你可以使用以下代码来发送一个 POST 请求:- import okhttp3.*
- import java.io.IOException
- fun main() {
- // 创建 OkHttpClient 实例
- val client = OkHttpClient()
- // 创建请求体(这里是一个简单的 JSON 字符串,实际应用中可能是一个更复杂的对象)
- val json = """
- {
- "username": "exampleUser",
- "password": "examplePass"
- }
- """.trimIndent()
- val body = RequestBody.create(
- mediaType("application/json; charset=utf-8"), json
- )
- // 构建请求对象
- val request = Request.Builder()
- .url("https://example.com/api/login") // 替换为你的目标 URL
- .post(body) // 使用 POST 方法并设置请求体
- .build()
- // 发送请求并获取响应
- client.newCall(request).enqueue(object : Callback {
- override fun onFailure(call: Call, e: IOException) {
- // 请求失败时回调此方法
- e.printStackTrace()
- }
- override fun onResponse(call: Call, response: Response) {
- // 请求成功时回调此方法
- if (response.isSuccessful) {
- // 打印响应体
- println(response.body?.string())
- } else {
- // 处理不成功的响应
- println("Response code: ${response.code}")
- println("Response message: ${response.message}")
- }
- // 注意:response.body?.string() 只能调用一次,因为它会消耗响应体。
- // 如果你需要多次访问响应体,应该先将其保存到变量中。
- }
- })
- // 注意:上面的代码是异步执行的。enqueue 方法会将请求添加到调度队列中,
- // 并在后台线程中执行。当响应可用时,onResponse 或 onFailure 方法会被调用。
- // 如果你需要同步执行请求,可以使用 execute 方法,但这应该在非主线程中进行,
- // 因为它会阻塞当前线程直到响应返回。
- }
- // 辅助函数,用于创建 MediaType 对象
- fun mediaType(type: String): MediaType {
- return MediaType.parse(type) ?: MediaType.get("application/octet-stream")
- }
复制代码 在上面的代码中,我们首先创建了一个 OkHttpClient 实例。然后,我们构建了一个包含 JSON 数据的 RequestBody 对象。接着,我们使用 Request.Builder 来创建一个 Request 对象,设置 URL 和 POST 方法,并将请求体附加到请求上。最后,我们使用 client.newCall(request).enqueue(...) 方法异步发送请求,并在回调中处理响应。
请注意,上面的代码示例是在一个 Kotlin 控制台应用程序中运行的。如果你在 Android 应用中使用 OkHttp,你应该在适当的生命周期方法(如 onCreate)中发送请求,并确保在请求完成时更新 UI(通常是在 onResponse 回调中,但需要在主线程上进行)。此外,处理网络请求时,你应该考虑添加错误处理、重试逻辑和超时设置等。
|
|