You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin中正确使用OKHttp FormBody.Builder()调用DVLA车辆查询API?

解决DVLA车辆查询API的Kotlin/OKHttp请求错误问题

问题背景

已通过Python实现DVLA车辆查询API的调用,但改用Kotlin结合OKHttp适配Android应用时遇到问题:

  • 使用FormBody.Builder()构造请求体传递车牌信息,API返回400错误:

    {"errors":[{"status":"400","code":"ENQ108","detail":"Invalid format for field - vehicle registration number","title":"Bad Request"}]}

  • 打印Request对象仅能看到URL和请求头,无法查看请求体,难以定位问题。

错误原因

DVLA车辆查询API要求请求体为JSON格式,而你的代码使用了FormBody(表单编码格式),导致API无法正确解析registrationNumber参数,触发格式错误。

修正后的代码

import okhttp3.*
import java.io.IOException

private val client = OkHttpClient()

private val url_dvla = "https://driver-vehicle-licensing.api.gov.uk/vehicle-enquiry/v1/vehicles"
private val auth_dvla = "MY_API_KEY" // 替换为真实API密钥

fun main(){
    run(url_dvla)
}

fun run(url: String){
    // 构造JSON格式请求体
    val jsonMediaType = MediaType.get("application/json; charset=utf-8")
    val requestBody = RequestBody.create(
        jsonMediaType,
        """{"registrationNumber": "AP08EKT"}"""
    )
    
    val request = Request.Builder()
        .url(url)
        .post(requestBody)
        .addHeader("x-api-key", auth_dvla)
        .addHeader("Content-Type", "application/json") // 必须指定JSON类型的Content-Type
        .build()

    // 调试:打印请求体内容
    request.body?.let { body ->
        val buffer = okio.Buffer()
        body.writeTo(buffer)
        println("请求体内容: ${buffer.readUtf8()}")
    }
    println(request)

    client.newCall(request).enqueue(object : Callback{
        override fun onFailure(call: Call, e: IOException) {
            e.printStackTrace()
        }

        override fun onResponse(call: Call, response: Response) {
            response.body?.use { body ->
                println(body.string())
            }
        }
    })
}

关键修改说明

  1. 请求体格式替换:将FormBody改为JSON格式的RequestBody,符合API的参数要求。
  2. 添加Content-Type头:明确指定请求头Content-Type: application/json,告知API请求体的格式。
  3. 调试请求体:通过okio.Buffer读取请求体内容并打印,方便后续排查格式类问题。
  4. 资源优化:使用response.body?.use{}自动关闭响应体,避免资源泄漏。

内容的提问来源于stack exchange,提问作者arnzzz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 16:55:18