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

Ktor Client 3.2.0+ 首次使用存储令牌发起认证请求返回400 Bad Request问题求助

Ktor Client 3.2.0+ 首次使用存储令牌发起认证请求返回400 Bad Request问题求助

各位好,我碰到一个特别诡异的Ktor Client问题,折腾了好一阵没摸到根因,来请教下大家!

问题核心现象:

  • 正常流程(先登录拿到Token再调用接口):完全没问题,返回200
  • 重启App后,从SharedPreferences取出之前存储的Token发起完全相同的请求:第一次直接返回400 Bad Request;但我手动加了几秒延迟后重试同一个请求,居然能成功返回200
  • 已经反复核对:Token有效、请求头完全正确、请求体也没有异常;后端是本地部署的http://10.0.2.2:8090,用的Android模拟器
  • 临时规避方案:降级到Ktor 3.1.3版本后,这个问题立刻就消失了

完全一致的请求详情(失败/成功请求内容无任何差异):

REQUEST: http://10.0.2.2:8090/api/v1/customer/home
METHOD: GET
COMMON HEADERS ->
Accept: application/json
Accept-Charset: UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJjcC11c2VycyIsImlzcyI6ImNwX3NlcnZlciIsImVtYWlsIjoidGVzdDJAZ21haWwuY29tIiwiZXhwIjoxNzUzOTE1Njk2fQ.u-7Zm8s3Xq7sizKTYplhJGM7nCTGv8ZCJ5Oz-EHKAUs
Content-Type: application/json
User-Agent: android/1.0.0-1/724958a4b34264e6; Ktor
CONTENT HEADERS ->
Content-Length: 0
BODY
Content-Type: null
BODY START
BODY END

后端报错日志:

[eventLoopGroupProxy-4-1] TRACE Application - Failed to decode request
java.lang.IllegalArgumentException: text is empty (possibly HTTP/0.9)


后续更新(已找到可用解决方法):

2025年1月8日更新:我给Ktor的HttpClient配置了OkHttp引擎后,在Ktor 3.2.3版本下这个问题就解决了!配置代码如下:

HttpClient(OkHttp) {
    engine {
        preconfigured = okhttp3.OkHttpClient.Builder().build()
    }
    // 其他原有配置项...
}

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 13:15:29