使用 Alamofire 从 API 获取数据时出错
Posted
技术标签:
【中文标题】使用 Alamofire 从 API 获取数据时出错【英文标题】:Error when grabbing data from API using Alamofire 【发布时间】:2018-05-03 06:58:48 【问题描述】:在尝试使用 Alamofire 从 Internet 访问 API 时,任何人都知道如何处理此错误。奇怪的是我对其他 API 使用了相同的函数,它们似乎工作得很好,但不是这个。
API 是:
http://minecraftpocket-servers.com/api/?object=servers&element=voters&key=833gowl7nz7jyqaqx96dagqzamn431yr9h&month=current&format=json&limit=10
这是错误:
可选(错误域=NSURLErrorDomain Code=-1022 "资源可以 未加载,因为应用程序传输安全策略需要 使用安全连接。” UserInfo=NSUnderlyingError=0x6000004496c0 错误 域=kCFErrorDomainCFNetwork 代码=-1022 "(null)", NSErrorFailingURLStringKey=http://minecraftpocket-servers.com/api/?object=servers&element=voters&key=833gowl7nz7jyqaqx96dagqzamn431yr9h&month=current&format=json&limit=10, NSErrorFailingURLKey=http://minecraftpocket-servers.com/api/?object=servers&element=voters&key=833gowl7nz7jyqaqx96dagqzamn431yr9h&month=current&format=json&limit=10, NSLocalizedDescription=资源无法加载,因为 应用传输安全策略需要使用安全的 连接。)
这是我要调用的函数。
func getAPIData(url: String)
Alamofire.request(url, method: .get)
.responseJSON response in
if response.result.isSuccess
let dataJSON : JSON = JSON(response.result.value!)
self.updateLabels(json: dataJSON)
print("Success!")
else
print("Error: Could not get data.")
print("Error: ", response.error)
【问题讨论】:
【参考方案1】:这是因为您使用的不是安全站点 (https),而是 http。
将此添加到您的 info.plist
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
【讨论】:
【参考方案2】:正如它所说,应用传输安全策略需要安全连接。
您可以在您的 plist 中启用任意加载
将条目Add App Transport Security Settings
添加为字典并添加一个布尔条目Allow Arbitrary Loads
,设置为true。
但是,如果您可以控制服务器端,我建议您使用 SSL。使用 HTTPS 不会触发此错误。
【讨论】:
以上是关于使用 Alamofire 从 API 获取数据时出错的主要内容,如果未能解决你的问题,请参考以下文章
使用 alamofire 和 swiftyJson 从 UICollectionViewCell 内的 UICollectionView 的 api 中获取数据
UIView 在使用 SwiftyJSON 和 Alamofire 从 API 返回的数据之前被渲染