Swift URLSession.shared.dataTask GET Request -1001 возвращает время ожидания - PullRequest
0 голосов
/ 28 сентября 2018

Отправка запроса POST на наш сервер NGINX хорошо работает с URLRequest и URLSession.shared.dataTask.Я могу войти в свое приложение, но когда я пытаюсь выполнить запрос GET, на моем сервере не регистрируется, что запрос дошел до него.Наконец я получаю ошибку тайм-аута.Важно, я использую https.Я также пытался использовать http для GET-запросов.на моем сервере NGINX я установил TLS только на 1,2 (я не системный специалист, я сделал это в файле nginx cfg.

Error Domain = NSURLErrorDomain Code = -1001 "Zeitüberschreitung bei der Anforderung."UserInfo = {NSUnderlyingError = 0x60400005abe0 {Домен ошибки = kCFErrorDomainCFNetwork Code = -1001" (ноль) "UserInfo = {_ kCFStreamErrorCodeKey = -2102, _kCFStreamErrorDomainKey = 4}* _kCFStreamErrorDomainKey = 4, _kCFStreamErrorCodeKey = -2102, NSLocalizedDescription = Zeitüberschreitung bei der Anforderung.}

Я уверен, что мой код для URLRequest и URLSession правильный, так как для локального хоста и локального хостаУ меня нет никаких проблем.

Это мой код для создания моего URLRequest

private func buildUrlRequest(jsonObject:[String: Any], connectionType:ConnectionTypes, url:String) -> NSMutableURLRequest? {
    let jsonDataSerialized:Data
    do {
        jsonDataSerialized = try JSONSerialization.data(withJSONObject: jsonObject)
    } catch {
        return nil
    }
    var request:NSMutableURLRequest
    if nextData {
        request = URLRequest(url: URL(string: self.nextRequestPage)!) as! NSMutableURLRequest
    } else {
        let tString = self.mBaseUrl + url
        if let encoded = tString.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed),
            var finalurl = URL(string: encoded)
        {
            if connectionType == .GET {
                var tString:String
                tString=finalurl.absoluteString
                tString = tString.replacingOccurrences(of: "https", with: "http")
                finalurl = URL(string:tString)!
            }
            request = URLRequest(url: finalurl) as! NSMutableURLRequest
        } else {
            return nil
        }
    }
    request.httpMethod = connectionType.rawValue // i am using enum here
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    request.setValue("no-cache)", forHTTPHeaderField: "Cache-Control")
    request.httpBody = jsonDataSerialized
    if mUser != nil && mUser.getSessionId() != nil {
        request.addValue("Token " + mUser.getSessionId()!, forHTTPHeaderField: "Authorization")
    }
    request.cachePolicy = .reloadIgnoringLocalAndRemoteCacheData
    request.timeoutInterval = 30.0
    return request
}

Вот как я создаю задачу ... после тела методаиспользуя task.resume()

let task = URLSession.shared.dataTask(with: request as URLRequest) { data, response, error in .... (and so on)

Я трачу больше часа, чтобы решить эту проблему ... Но я понятия не имею. Я не уверен, если Pпроблема в конфигурации сервера или в коде Swift ...

1 Ответ

0 голосов
/ 28 сентября 2018

Основная проблема была jsonObject:[String: Any]!Я изменил его на jsonObject:[String: Any]?

. В своем коде я создал тело для каждого запроса, независимо от того, был ли он POST GET PUT или как-то еще.Без http-тела в GET-запросе у меня больше нет проблем, нет тайм-аута!Я правильно получаю данные, как и ожидалось.

Я также обнаружил, что нет необходимости устанавливать nginx или разрешать шифрование sll_protocols на TLS 1.2 только в моем случае.

Я надеюсь, что есликто-то еще сталкивается с этой проблемой, они найдут этот пост:)

...