2016-08-22 4 views
6

Ich arbeite an einem Swift-Projekt, das viel API-Konsum erfordert. Alles funktioniert gut, aber manchmal (1 in 20), bekomme ich Code=-1001 "The request timed out." Fehler beim Aufruf der API.Code = -1001 "Die Anfrage ist abgelaufen."

Ich benutze Alamofire. Ich füge den Code an die Aufruf-API an.

let request = NSMutableURLRequest(URL: url) 
request.HTTPMethod = "POST"  
request.HTTPBody = myUrlContents.dataUsingEncoding(NSUTF8StringEncoding) 

request.timeoutInterval = 15 

request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 
request.setValue("application/json", forHTTPHeaderField: "Accept") 
request.setValue("\(myUrlContents.dataUsingEncoding(NSUTF8StringEncoding)!.length)", forHTTPHeaderField: "Content-Length") 
request.setValue("en-US", forHTTPHeaderField: "Content-Language") 

Alamofire.request(request) 
     .validate() 
     .responseJSON { [weak self] response in 

     if response.result.isSuccess { 
      if let result = response.result.value { 
        print("Result: \(result)") 

        completion(result: result as! NSDictionary) 
      } 
     } 
     else { 
      print(response.debugDescription) 
     } 
} 

und das Protokoll ist

[Request]: <NSMutableURLRequest: 0x18855620> { URL: http://....... (url)} 
[Response]: nil 
[Data]: 0 bytes 
[Result]: FAILURE: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSErrorFailingURLStringKey=http://.....(url) NSErrorFailingURLKey=http://.....(url), NSLocalizedDescription=The request timed out., _kCFStreamErrorDomainKey=4, NSUnderlyingError=0x18a08900 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2102}}} 
[Timeline]: Timeline: { "Request Start Time": 493582123.103, "Initial Response Time": 493582138.254, "Request Completed Time": 493582138.254, "Serialization Completed Time": 493582138.256, "Latency": 15.151 secs, "Request Duration": 15.151 secs, "Serialization Duration": 0.002 secs, "Total Duration": 15.153 secs } 

Ich weiß, ich kann die Timeout-Zeit erhöhen, um die Fehler zu vermeiden. Aber ich möchte den tatsächlichen Grund wissen, warum es den Fehler wirft. Keines meiner API benötigt mehr als 2 Sekunden, um Daten zurückzugeben. Warum zeigt es dann eine Latenz von 15,151 Sekunden?

Ich benutze LAMP-Stack auf Backend. Jede Hilfe wäre willkommen.

+0

Sie sehen die Anforderung, dass das Zeitlimit auf Ihrem Server empfangen wird? Wie lange dauert es, bis der Server es verarbeitet? –

+0

Haben Sie jedes Mal genau die gleiche URL? Es scheint mir unwahrscheinlich, dass dies ein Problem mit Ihrer App ist. Wahrscheinlicher ist, dass Sie ein Szenario haben, in dem Ihre API langsam ist. –

+0

Haben Sie versucht, diese Anfrage auf einem REST-Client zu stellen? Ist es Timeout? – quant24

Antwort

3

Ich hatte den Fehler mit Code = -1001 "Die Anfrage abgelaufen.". Ich habe ein paar Dinge ausprobiert. Nichts hat geklappt. Schließlich fand ich heraus, dass das Problem in meinen Parametern war, die ich in den Anfragekörper zum Server sendete, die vom falschen Format waren (Wert war gut, aber Typ war falsch). Das war der Grund, warum die Anfrage abgelaufen war, weil der Server sie nicht verarbeiten konnte. Du kannst das überprüfen, wenn nichts anderes für dich funktioniert.

+1

danke mann! Habe nur ein paar Stunden damit verbracht, herauszufinden, was mit einer einfachen Anfrage "Moya" + "Alamofire" falsch ist. Das Problem war das leere Parameterwörterbuch '[:]' anstelle von 'nil' – medvedNick

Verwandte Themen