NSURLSession:如何增加URL请求的超时时间?

我正在使用iOS 7的新的NSURLSessionDataTask检索数据如下:

 NSURLSession *session = [NSURLSession sharedSession]; NSURLSessionDataTask *dataTask = [session dataTaskWithRequest: request completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error) { // }]; 

如何增加超时值以避免错误"The request timed out" (在NSURLErrorDomain代码= -1001 )?

我已经检查了NSURLSessionConfiguration的文档,但没有find设置超时值的方法。

感谢您的帮助!

ObjC

 NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration]; sessionConfig.timeoutIntervalForRequest = 30.0; sessionConfig.timeoutIntervalForResource = 60.0; 

迅速

 let sessionConfig = URLSessionConfiguration.default sessionConfig.timeoutIntervalForRequest = 30.0 sessionConfig.timeoutIntervalForResource = 60.0 let session = URLSession(configuration: sessionConfig) 

什么文档说

timeoutIntervalForRequesttimeoutIntervalForResource指定请求的超时间隔以及资源。

timeoutIntervalForRequest – 等待其他数据时使用的超时间隔。 每当新数据到达时,与该值关联的计时器就会重置。 当请求计时器达到指定的时间间隔而没有收到任何新数据时,会触发超时。

timeoutIntervalForResource – 资源请求应该允许的最大时间量。 此值控制在放弃之前等待整个资源传输的时间。 资源定时器在启动请求时启动,并计数直到请求完成或达到超时间隔,以先到者为准。

基于NSURLSessionConfiguration类参考

如果Swift开发者来到这里

要做到这一点,你需要使用

  let urlconfig = NSURLSessionConfiguration.defaultSessionConfiguration() urlconfig.timeoutIntervalForRequest = 12 urlconfig.timeoutIntervalForResource = 12 self.session = NSURLSession(configuration: urlconfig, delegate: self.delegates, delegateQueue: nil) 

在迅速3.超时15秒。

  let configuration = URLSessionConfiguration.default configuration.timeoutIntervalForRequest = TimeInterval(15) configuration.timeoutIntervalForResource = TimeInterval(15) let session = URLSession(configuration: configuration) 

NSURLSessionConfiguration包含属性timeoutIntervalForRequest:

 @property NSTimeInterval timeoutIntervalForRequest 

控制超时间隔。 请求启动后,还有timeoutIntervalForResource作为超时。

在SWIFT 3.0中,您需要使用

  if let cleanURLString = urlString.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed), let theURL: Foundation.URL = Foundation.URL(string: cleanURLString) { var task:URLSessionDataTask? let urlconfig = URLSessionConfiguration.default urlconfig.timeoutIntervalForRequest = 20 urlconfig.timeoutIntervalForResource = 60 let session = Foundation.URLSession(configuration: urlconfig, delegate: self, delegateQueue: OperationQueue.main) let request = URLRequest(url: theURL) request.httpMethod = "POST" request.cachePolicy = URLRequest.CachePolicy.reloadIgnoringCacheData request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type") let paramString = YourParameterString request.httpBody = paramString.data(using: String.Encoding.utf8) task = session.dataTask(with: request) { (data, response, error) in // Do here }) dataTask.resume() }