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
相关产品推荐
相关产品推荐

