Program Club

NSURLSession : URL 요청에 대한 시간 초과를 늘리는 방법은 무엇입니까?

proclub 2020. 12. 3. 20:47
반응형

NSURLSession : URL 요청에 대한 시간 초과를 늘리는 방법은 무엇입니까?


NSURLSessionDataTask다음과 같이 데이터를 검색하기 위해 iOS 7의 새로운 기능 사용 하고 있습니다.

NSURLSession *session = [NSURLSession sharedSession];

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

오류를 피하기 위해 시간 초과 값을 늘리려면 어떻게해야 합니까 "The request timed out"( NSURLErrorDomainCode =에서 -1001)?

NSURLSessionConfiguration 에 대한 설명서를 확인 했지만 시간 초과 값을 설정하는 방법을 찾지 못했습니다.

도와 주셔서 감사합니다!


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

Swift 4 :

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

The timeoutIntervalForRequest is for all tasks within sessions based on this configuration. The timeoutIntervalForResource is for all tasks within sessions based on this configuration.


In my case I was increasing the timeout of the wrong class. My timeout error was solved by increasing the timeout of the URLRequest not the URLSession

var request = URLRequest(url: url)
request.timeoutInterval = 30

참고URL : https://stackoverflow.com/questions/23428793/nsurlsession-how-to-increase-time-out-for-url-requests

반응형