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

