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

Ale*_*exR 61 http objective-c nsurlconnection ios swift

我使用iOS 7的新NSURLSessionDataTask功能检索数据如下:

NSURLSession *session = [NSURLSession sharedSession];

NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:
request completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {
//
}];
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢您的帮助!

Raf*_*fAl 107

ObjC

NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
sessionConfig.timeoutIntervalForRequest = 30.0;
sessionConfig.timeoutIntervalForResource = 60.0;
Run Code Online (Sandbox Code Playgroud)

迅速

let sessionConfig = URLSessionConfiguration.default
sessionConfig.timeoutIntervalForRequest = 30.0
sessionConfig.timeoutIntervalForResource = 60.0
let session = URLSession(configuration: sessionConfig)
Run Code Online (Sandbox Code Playgroud)

什么文档说

timeoutIntervalForRequesttimeoutIntervalForResource指定请求和资源的超时间隔.

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

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

基于NSURLSessionConfiguration类参考

  • 嗨reecon,我希望我的Web服务的超时间隔是180秒(3分钟).自从我读到NSURLSESSION及其timeoutIntervalForRequest和timeoutIntervalForResource之后,我尝试使用这些,再次产生与NSMutableURLRequest.ie的timeOutInterval相同的结果,我设置的时间间隔为180秒,如`sessionConfig.timeoutIntervalForRequest = 180.0; sessionConfig.timeoutIntervalForResource = 180.0;`,但我接收失败回调75秒钟或在某个随机时间间隔,称"请求超时".对此有什么想法? (7认同)
  • 注意`timeoutIntervalForRequest`的默认值是60秒,`timeoutIntervalForResource`的默认值是7天. (7认同)
  • timeoutIntervalForRequest在设置为低于60的值时有效,但是当我将其设置为更高的值时,超时会在60秒后发生... (4认同)
  • 对于 60 秒后仍然遇到请求超时问题的人:事实证明,“URLRequest”本身也有一个“timeoutInterval”,它也默认为 60 秒。一旦将该值设置为您想要的值,您还必须确保将“configuration.timeoutIntervalForRequest”设置为等于或更大的值;否则 `urlRequest.timeoutInterval` 值将不起作用。 (2认同)

Sru*_*Suk 16

如果Swift开发者来到这里

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

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


Dan*_*nov 8

在swift 3.超时15秒.

    let configuration = URLSessionConfiguration.default
    configuration.timeoutIntervalForRequest = TimeInterval(15)
    configuration.timeoutIntervalForResource = TimeInterval(15)
    let session = URLSession(configuration: configuration)
Run Code Online (Sandbox Code Playgroud)


Nic*_*oso 6

就我而言,我增加了错误课程的超时时间。我的超时错误是通过增加URLRequest的超时而不是URLSession 来解决的

var request = URLRequest(url: url)
request.timeoutInterval = 30
Run Code Online (Sandbox Code Playgroud)

  • 这就是为我解决了超时问题的原因。我希望这需要与上述设置结合起来。 (2认同)