2017-08-02 66 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,您是對的,這是解決方案 –