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

Kotlin中如何为x-www-form-urlencoded类型POST请求添加请求体

错误点说明

你当前代码中使用JSONObject构造请求体的逻辑不符合application/x-www-form-urlencoded的格式要求,该格式的请求体为URL编码后的键值对拼接字符串,格式为key1=value1&key2=value2,和JSON结构完全不兼容,直接返回JSON字符串会导致服务端无法正常解析参数。

实现方案

直接修改buildPostBody方法,构造符合格式要求的请求体即可,示例代码如下:

import java.net.URLEncoder

class Login: PostRequest()  {
    override fun buildHttpRequestBuilder(): HttpRequest.Builder {
        val httpRequestBuilder = super.buildHttpRequestBuilder()
        httpRequestBuilder.header("Content-Type", "application/x-www-form-urlencoded")
        return httpRequestBuilder
    }

    override fun buildUrl(): String {
        return "你的实际登录接口地址"
    }

    override fun buildPostBody(): String {
        // 按需求填写所有请求参数
        val paramMap = mapOf(
            "grant_type" to "client_credentials",
            "client_id" to "你的客户端ID",
            "client_secret" to "你的客户端密钥"
        )
        // 拼接为urlencoded格式字符串,所有键值都做UTF-8编码避免特殊字符解析错误
        return paramMap.entries.joinToString("&") { (key, value) ->
            "${URLEncoder.encode(key, Charsets.UTF_8.name())}=${URLEncoder.encode(value, Charsets.UTF_8.name())}"
        }
    }
}
验证注意事项
  • 构造完成后可以打印buildPostBody的返回值,正常格式示例:grant_type=client_credentials&client_id=test_id&client_secret=test_secret
  • 如果服务端返回参数解析错误,优先检查特殊字符是否已经完成URL编码,避免空格、+、=、/等字符导致解析失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:45:05