KMP项目中Ktor iOS端请求报Invalid url异常排查求助
KMP项目中Ktor iOS端URL无效异常的原因及修复
核心原因
你的HttpClient配置里host字段错误地包含了路径部分:
host = "example.com/api/v1"
host字段仅应填写域名(example.com),路径(/api/v1)属于URL的path部分,不该混入host中。
Android端的Ktor引擎(基于OkHttp)对不规范的URL解析有容错性,能自动修正格式;但iOS端使用的Darwin引擎(基于NSURLSession)对URL格式要求更严格,会直接判定此类URL无效,抛出IllegalStateException。
修复方案
修改HttpClient的defaultRequest配置,将域名与路径分离:
HttpClient { expectSuccess = true defaultRequest { // 仅保留域名作为host host = "example.com" url { protocol = URLProtocol.HTTPS // 添加基础路径/api/v1 path("api/v1") } contentType(ContentType.Application.Json) header("X-API-KEY", BuildKonfig.API_KEY) } // 其他配置(超时、内容协商、日志)保持不变... }
修改后,原API调用代码client.get("history").body()会自动拼接为合法的完整URL:https://example.com/api/v1/history。
也可以采用更直观的写法,直接在defaultRequest中指定完整基础URL:
defaultRequest { url("https://example.com/api/v1") contentType(ContentType.Application.Json) header("X-API-KEY", BuildKonfig.API_KEY) }
验证
重新编译iOS端项目后,网络请求即可正常发起,不会再出现URL无效的异常。
内容的提问来源于stack exchange,提问作者Ahsan Ullah Rasel
相关产品推荐
相关产品推荐

