首页 > 解决方案 > 使用 OkHttp 在 Kotlin 中发送和接收网络请求

问题描述

我正在使用下面的代码通过 OkHttp 发送和接收网络请求。在得到响应之前如何知道请求是否发送成功?例如,我想添加一个跟踪以知道请求已成功发送并且我现在正在等待响应。

val client = OkHttpClient()
val builder = FormBody.Builder()
val formBody = builder.build()
val request = Request.Builder()
      .url(url)
      .post(formBody)
      .build()
val response = client.newCall(request).execute()
val jsonDataString = response.body()?.string()
...

标签: androidkotlinokhttp

解决方案


使用 EventListener API https://square.github.io/okhttp/events/

#!/usr/bin/env kotlin

@file:Repository("https://repo1.maven.org/maven2/")
@file:DependsOn("com.squareup.okhttp3:okhttp:4.9.0")
@file:CompilerOptions("-jvm-target", "1.8")

import okhttp3.Call
import okhttp3.EventListener
import okhttp3.OkHttpClient
import okhttp3.Request

val client = OkHttpClient.Builder()
  .eventListener(object : EventListener() {
    override fun requestBodyEnd(call: Call, byteCount: Long) {
      println("requestBodyEnd: $call")
    }

    override fun responseHeadersStart(call: Call) {
      println("responseHeadersStart: $call")
    }
  })
  .build()

val request = Request.Builder()
  .url("https://httpbin.org/get")
  .build()

val body = client.newCall(request).execute().use {
  it.body!!.string()
}

println(body)

示例代码(Intellij 的 Kotlin 脚本) - 名称 example.main.kts


推荐阅读