2017-07-28 210 views
0

我有這個功能來測試發送HTTP請求。Swift Http客戶端不發送請求

public func test(url: URL) { 
    print("test") 
    var request = URLRequest(url: url!) 
    request.httpMethod = "GET" 
    let session = URLSession.shared 
    session.dataTask(with: request) { data, response, err in 
     print("Entered the completionHandler") 
     guard err == nil else { 
      print("error calling GET") 
      print(err!) 
      return 
     } 
    }.resume() 
} 

我在我的測試中運行代碼,以確保它的發送請求。 它永遠不會進入完成塊(Entered the completionHandler從未打印過)。我是Swift新手,我錯過了什麼?

func test_download() { 
    myClient.test(url: URL(string:"https://www.google.com")!) 
    print("sleeping...") 
    sleep(10) 
    print("done...") 
} 
+0

除了重複被迫展開,該代碼應該是工作。其餘的打印電話是否工作? –

回答

0

看來你沒有正確使用閉包。試試這個:

// No need to explicitly set GET method since this is the default one. 
let session = URLSession.shared 
var request = URLRequest(url: url!) 
session.dataTask(with: request) { (data, response, err) in 
    print("Entered the completionHandler") 
    guard err == nil else { 
     print("error calling GET") 
     return 
    } 
    // Do whatever you need to with data and response in here 

}.resume() 
0

看起來你需要在你的會話配置爲使用URLSessionConfiguration: -

let urlConfig = URLSessionConfiguration.default 
urlConfig.timeoutIntervalForRequest = 5 
urlConfig.timeoutIntervalForResource = 5 
let session = Foundation.URLSession(configuration: urlConfig, delegate: nil, delegateQueue: nil) 
//Now try your code 
let task = session.dataTask(with: request) { data, response, err in 
     print("Entered the completionHandler") 
     guard err == nil else { 
      print("error calling GET") 
      print(err!) 
      return 
     } 
    } 
task.resume() 
相關問題