2017-08-02 90 views
-1

我在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并确定。请帮助解决问题。Consuming Rest API Swift 3

没有工作

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() 
+2

这可能是由于http和https。您是否在您的info.plist中添加了NSAppTransportSecurity密钥? –

+0

当你说不工作,你没有得到statusCode == 200,或者你不能解析或无法击中API。您是否在您的info.plist中添加了NSAppTransportSecurity密钥? –

+0

不相关,但发送GET请求时根本不需要URLRequest。只需传递网址即可。并且不要在Swift中使用'NSMutableURLRequest'。有一个本地结构'URLRequest'。 – vadian

回答

1

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

由于App Transport Security不安全,App Transport Security已阻止明文HTTP(http://)资源 加载。临时例外可以通过 您的应用程序的Info.plist文件进行配置。

所以这里是解决

来吧,添加以下关键是你的Info.plist文件可见源

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

enter image description here

从plist中编辑。

+1

请提供您的意见谁投下了这一个。这是确切的问题和解决方案。或者如果您认为这不是,请提供答案。 –

+1

等待下来的选民评论!!!!或者通过http://使用任何你想要的。请!! –

+0

谢谢Mohammad Sadiq,您是对的,这是解决方案 –