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

已添加ATS例外仍遇NSURLErrorDomain:-1003错误求助

解决iOS Swift HTTPS POST请求的NSURLErrorDomain: -1003错误

NSURLErrorDomain的-1003对应CannotFindHost,意思是系统无法解析目标主机,这个问题和你配置的ATS例外关系不大,重点排查域名解析、代理相关的问题,具体步骤如下:

  • 先确认目标URL是否正确
    发起请求前打印url.absoluteString,检查域名拼写有没有错误、是否包含非法字符,确保是合法的HTTPS地址。比如有没有把https写成http,或者域名后缀写错。

  • 排查设备代理设置
    错误日志里提到了proxy pac,说明当前设备可能开了自动代理(PAC)或手动代理,导致域名解析异常:

    • 测试时可以先关闭代理:打开设置→Wi-Fi→点击当前网络的小i图标→代理→选择“关闭”,再重新发起请求看是否正常。
    • 如果是企业环境必须用代理,要检查PAC文件是否能正常访问,或者PAC规则里有没有正确放行你的目标域名,避免被错误拦截。
  • 验证域名本身的可访问性
    用设备自带的Safari直接访问目标域名,如果Safari也打不开,说明是域名本身的问题——可能域名没备案、DNS服务器无法解析,或者服务器本身宕机了。

  • 自定义URLSession绕过代理
    如果你不需要使用系统代理,可以自定义URLSession配置来清空代理设置:

    let config = URLSessionConfiguration.default
    config.connectionProxyDictionary = [:]
    let session = URLSession(configuration: config)
    
    // 使用这个自定义session发起请求
    let (data, response) = try await session.data(for: request)
    
  • 完善错误捕获逻辑
    你当前的代码只判断了HTTP状态码,没捕获请求过程中的网络错误,建议修改代码来打印具体错误信息,方便排查:

    do {
        let (data, response) = try await URLSession.shared.data(for: request)
        guard let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 else {
            let statusCode = (response as? HTTPURLResponse)?.statusCode ?? -1
            throw NSError(domain: "NetworkRequestError", code: statusCode, userInfo: ["response": response])
        }
        // 处理返回数据
    } catch let error as NSError {
        print("请求失败:\(error.domain) 错误码:\(error.code) 详情:\(error.userInfo)")
        // 根据错误码做针对性处理
    }
    

内容的提问来源于stack exchange,提问作者unnamed-dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 21:33:21