【问题标题】:Consuming Rest API Swift 3使用 Rest API Swift 3
【发布时间】:2017-08-02 05:50:22
【问题描述】:

我对 SWIFT 3 有一个问题。当我使用带有两个不同 URL 的 rest api 时,由于某种原因,这个 URL“http://sistemas2.laprensa.com.ni/LaPrensa/api/Beacons”不工作,而这个 URL“https://app.ccn.com.ni:8080/BeerWayNicaragua/api/BusinessType”工作。我检查了 JSON 并且没问题。请帮助我了解问题所在。

没有工作

    let url = "http://sistemas2.laprensa.com.ni/LaPrensa/api/Beacons"
    let requestURL: URL = URL(string: url)!
    let urlRequest: NSMutableURLRequest = NSMutableURLRequest(url: requestURL)
    urlRequest.httpMethod = "GET"
    urlRequest.addValue("application/json; charset=UTF-8", forHTTPHeaderField: "Content-Type")
    urlRequest.addValue("application/json; charset=UTF-8", forHTTPHeaderField: "Accept")
    let task = URLSession.shared.dataTask(with: urlRequest as URLRequest) {data,response,error in

        if response != nil {
            let httpResponse = response as! HTTPURLResponse
            let statusCode = httpResponse.statusCode

            if (statusCode == 200) {

                do {
                    let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments)
                    callback((json as? [[String: AnyObject]])!)
                }catch {
                    print("Error with Json: \(error)")
                }
            }
        }
    }
    task.resume()

这是有效的,只是我更改了 URL。我不知道发生了什么。

    let url = "https://app.ccn.com.ni:8080/BeerWayNicaragua/api/BusinessType"
    let requestURL: URL = URL(string: url)!
    let urlRequest: NSMutableURLRequest = NSMutableURLRequest(url: requestURL)
    urlRequest.httpMethod = "GET"
    urlRequest.addValue("application/json; charset=UTF-8", forHTTPHeaderField: "Content-Type")
    urlRequest.addValue("application/json; charset=UTF-8", forHTTPHeaderField: "Accept")
    let task = URLSession.shared.dataTask(with: urlRequest as URLRequest) {data,response,error in

        if response != nil {
            let httpResponse = response as! HTTPURLResponse
            let statusCode = httpResponse.statusCode

            if (statusCode == 200) {

                do {
                    let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments)
                    callback((json as? [[String: AnyObject]])!)
                }catch {
                    print("Error with Json: \(error)")
                }
            }
        }
    }
    task.resume()

【问题讨论】:

  • 这可能是由于 http 和 https。您是否在 info.plist 中添加了 NSAppTransportSecurity 密钥?
  • 当您说不工作时,您是否没有获得 statusCode == 200 或者您无法解析或无法访问 API。您是否在 info.plist 中添加了 NSAppTransportSecurity 密钥?
  • 不相关,但发送 GET 请求时根本不需要 URLRequest。只需传递 URL。并且不要在 Swift 中使用 NSMutableURLRequest。有一个原生结构URLRequest
  • 您的代码目前看来是正确的,如果出现问题可能是在回调函数中,请提供回调函数的代码,如果可以的话。
  • 另外请详细说明您遇到了什么问题?

标签: ios iphone swift swift3


【解决方案1】:

当您尝试发出请求时,请阅读控制台日志。你会注意到抱怨。

App Transport Security 已阻止明文 HTTP (http://) 资源 加载,因为它不安全。可以通过以下方式配置临时异常 您应用的 Info.plist 文件。

所以这里是解决方案

继续往你的 info.plist 文件中添加以下键

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

来自 plist 编辑器。

【讨论】:

  • 请提供您的 cmets 否决这个投票。这是确切的问题和解决方案。或者,如果您认为不是,请提供答案。
  • 等待投票失败的 cmets!!!!或者通过 http:// 使用您想要的任何内容。请!!
  • 感谢 Mohammad Sadiq,您说得对,这就是解决方案
  • 更好的解决方案是让您的服务器符合 TLS 1.2,这样您就无需停用网络安全
  • 是的!当你可以控制它时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多