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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:57:16