2016-02-04 94 views
1

我正在寫一個應用程序使用swift並試圖整合優步api。 我想做到這一點確切簡單的(!?)要求我做終端:錯誤域= NSURLErrorDomain代碼= -1005捲曲請求到優步api

curl -X GET -G 'https://sandbox-api.uber.com/v1/products' -d server_token=*************************************** -d latitude=21.3088619 -d longitude=-157.8086674 

爲此我嘗試下面的代碼:

func performPostUberRequest() { 
     let url: NSURL = NSURL(string: "https://sandbox-api.uber.com/v1/products") 
     print("performPostUberRequest Ignited") 
     let params:[String: AnyObject] = ["server_token" : "***************************************", "latitude" : "21.3088621", "longitude" : "-157.8086632"] 
     let request: NSMutableURLRequest = NSMutableURLRequest(URL: url) 
     request.HTTPMethod = "GET" 
     request.addValue("application/json", forHTTPHeaderField: "Content-Type") 
     do { 
      try request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions()) 
     } catch { 

     } 
     print("performPostUberRequest ongoing") 
     NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()){ 

      response, data, error in 
      if let error = error { 
       print("error: ") 
       print(error) 
       print("data: ") 
       print(data) 
       print("response: ") 
       print(response) 
      } else if data != nil { 
       do { 
        let json: NSDictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions()) as! NSDictionary 
        print("here comes JASON: ") 
        print(json) 

       } catch { 
        print("Epic Fail") 
       } 
      } 
     } 
    } 

但不管我嘗試3- 4天現在給我確切的同樣的答案:

performPostUberRequest Ignited 
performPostUberRequest ongoing 
error: 
Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={NSErrorFailingURLStringKey=https://sandbox-api.uber.com/v1/products, _kCFStreamErrorCodeKey=-4, NSErrorFailingURLKey=https://sandbox-api.uber.com/v1/products, NSLocalizedDescription=The network connection was lost., _kCFStreamErrorDomainKey=4, NSUnderlyingError=0x16da79f0 {Error Domain=kCFErrorDomainCFNetwork Code=-1005 "The network connection was lost." UserInfo={_kCFStreamErrorCodeKey=-4, NSErrorFailingURLStringKey=https://sandbox-api.uber.com/v1/products, NSErrorFailingURLKey=https://sandbox-api.uber.com/v1/products, NSLocalizedDescription=The network connection was lost., _kCFStreamErrorDomainKey=4}}} 
data: 
nil 
response: 
nil 

編輯:

我下載了查爾斯,這給了我下面的屏幕:

enter image description here

讓我困擾的是該行說"SSL Proxying not enabled for this host: enable in Proxy Settings, SSL locations"另外,我是不是能夠通過終端進入curl命令時觸發查爾斯什麼。我想這是正常的。

SO上的每個解決方案都告訴我要重新啓動模擬器,我這樣做。我去了模擬器設置並啓用了HTTP服務。我吹了墨盒,然後走到谷歌的第2頁。請。幫幫我。我。

編輯2:解

下面是最終代碼,這要歸功於@faarwa

func performPostUberRequest() { 
     var components = NSURLComponents() 
     components.scheme = "https" 
     components.host = "sandbox-api.uber.com" 
     components.path = "/v1/products" 
     components.queryItems = [ 
      NSURLQueryItem(name: "server_token", value: "********"), 
      NSURLQueryItem(name: "latitude", value: "21.3088621"), 
      NSURLQueryItem(name: "longitude", value: "-157.8086632") 
     ] 
     let request: NSMutableURLRequest = NSMutableURLRequest(URL: components.URL!) 
     NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()){ 
print("thanks faarwa") 
} 
+0

很高興你的工作。乾杯! – faarwa

回答

2

通過URL而不是HTTP消息體,因爲它是一個GET請求發送查詢參數。刪除:

do { 
     try request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions()) 
    } catch { 

    } 

並添加PARAMS到NSURL應該解決這個問題(例如使用NSURLComponents)。

相關問題