with finished error codes code ios objective-c swift http nsurlconnection

ios - finished - NSURLSession: ¿cómo aumentar el tiempo de espera para las solicitudes de URL?



nsurlconnection error codes (6)

ObjC

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

Rápido

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

Qué dicen

timeoutIntervalForRequest y timeoutIntervalForResource especifican el intervalo de tiempo de espera para la solicitud y el recurso.

timeoutIntervalForRequest - El intervalo de tiempo de espera para usar cuando se esperan datos adicionales. El temporizador asociado con este valor se restablece cada vez que llegan nuevos datos. Cuando el temporizador de solicitud alcanza el intervalo especificado sin recibir ningún dato nuevo, desencadena un tiempo de espera excedido.

timeoutIntervalForResource : la cantidad máxima de tiempo que una solicitud de recursos debe permitirse. Este valor controla cuánto tiempo esperar para que un recurso completo se transfiera antes de darse por vencido. El temporizador de recursos se inicia cuando se inicia la solicitud y cuenta hasta que se completa la solicitud o se alcanza este intervalo de tiempo de espera, lo que ocurra primero.

Basado en NSURLSessionConfiguration Class Reference

Estoy utilizando el nuevo NSURLSessionDataTask iOS 7 para recuperar datos de la siguiente manera:

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

¿Cómo puedo aumentar los valores de tiempo de espera para evitar el error "The request timed out" (en NSURLErrorDomain Code = -1001 )?

NSURLSessionConfiguration la documentación de NSURLSessionConfiguration pero no encontré la manera de establecer el valor de tiempo de espera.

¡Gracias por tu ayuda!


En SWIFT 3.0, debe usar

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() }


En caso de que el desarrollador de Swift llegue aquí

para hacer esto, necesitas usar

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


En veloz 3. agote los 15 segundos.

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


NSURLSessionConfiguration incluye la propiedad timeoutIntervalForRequest:

@property NSTimeInterval timeoutIntervalForRequest

para controlar el intervalo de tiempo de espera. También hay timeoutIntervalForResource para el tiempo de espera después de que se inicia la solicitud.


Para Swift 4:

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

El timeoutIntervalForRequest es para todas las tareas dentro de sesiones basadas en esta configuración. El timeoutIntervalForResource es para todas las tareas dentro de sesiones basadas en esta configuración.