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

使用Alamofire调用API时遇NSURLErrorDomain Code=-1022错误求解决

解决Alamofire访问HTTP API时的NSURLErrorDomain Code=-1022错误

这个NSURLErrorDomain Code=-1022错误我太熟悉了——本质是App Transport Security (ATS) 在搞事情!

错误根源

iOS的ATS机制默认要求App只能访问HTTPS加密的网络资源,而你要调用的目标API是HTTP协议的(http://minecraftpocket-servers.com/...),直接触发了ATS的安全拦截。其他API能正常工作,大概率是因为它们用的是HTTPS协议。

另外还要注意:你提供的API URL里有&,这是HTML转义后的&符号,Alamofire解析时可能会出问题,建议替换成普通的&,正确的URL应该是:
http://minecraftpocket-servers.com/api/?object=servers&element=voters&key=833gowl7nz7jyqaqx96dagqzamn431yr9h&month=current&format=json&limit=10

解决方案

方案一:仅允许目标域名的HTTP访问(推荐,更安全)

这种方式只放开你需要的域名,不会降低整个App的安全性。操作步骤如下:

  1. 打开项目的Info.plist文件
  2. 添加一个名为NSAppTransportSecurity的字典
  3. 在这个字典里添加NSExceptionDomains字典
  4. 在NSExceptionDomains里添加minecraftpocket-servers.com字典,设置以下两个键值对:
    • NSIncludesSubdomains: 布尔值设为YES
    • NSExceptionAllowsInsecureHTTPLoads: 布尔值设为YES

对应的plist代码示例(可直接复制到plist源代码视图):

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>minecraftpocket-servers.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

方案二:全局关闭ATS(不推荐,仅用于测试)

如果只是临时测试需要,可以全局关闭ATS,但上线App时不建议这么做,会降低整个App的网络安全性:

  1. 打开Info.plist文件
  2. 添加NSAppTransportSecurity字典
  3. 在字典里添加NSAllowsArbitraryLoads键,布尔值设为YES

对应的plist代码:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

先修正URL的&amp;问题,再配置ATS,应该就能正常调用这个API了。

内容的提问来源于stack exchange,提问作者user8969667

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:35:43