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

