使用Alamofire

时间:2018-05-03 06:58:48

标签: swift api alamofire

当尝试使用Alamofire从互联网访问API时,任何人都知道如何处理此错误。奇怪的是我已经为其他API使用了相同的功能,它们似乎工作得非常好,但不是这样。

API是:

  

http://minecraftpocket-servers.com/api/?object=servers&element=voters&key=833gowl7nz7jyqaqx96dagqzamn431yr9h&month=current&format=json&limit=10

这是错误:

  

可选(错误域= NSURLErrorDomain代码= -1022"资源可以   因为App Transport Security策略需要,所以无法加载   使用安全连接。"   UserInfo = {NSUnderlyingError = 0x6000004496c0 {错误   Domain = kCFErrorDomainCFNetwork Code = -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)
                }
        }
    }

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

正如它所说,应用传输安全策略需要安全连接。

您可以在plist中启用任意加载

将条目Add App Transport Security Settings添加为字典并添加Bool条目Allow Arbitrary Loads,设置为true。

但是,如果您可以控制服务器端,我建议使用SSL。使用HTTPS不会触发此错误。