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.
Sie sehen die Anforderung, dass das Zeitlimit auf Ihrem Server empfangen wird? Wie lange dauert es, bis der Server es verarbeitet? –
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. –
Haben Sie versucht, diese Anfrage auf einem REST-Client zu stellen? Ist es Timeout? – quant24