iOS-Entwicklung: Warum bekomme ich immer den "Ein Verbindungsfehler ist aufgetreten" beim ersten Versuch, aber Erfolg beim nächsten?
Ich bin mit dem ASIHTTPRequest lib in meine iOS app, um RESTful-Anfragen, um meine Rails-3-web-app. Ich zu sehen, eine seltsame und etwas konsistente Fehler das 1. mal, dass ich versuche, eine POST-Anforderung an meine web-app, aber dann wird der POST request funktioniert gut, die auf den zweiten Versuch. Der genaue Fehler ist...
Error Domain=ASIHTTPRequestErrorDomain Code=1 "A connection failure occurred" UserInfo=0xb513740 {NSUnderlyingError=0xb5135a0 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1005.)", NSLocalizedDescription=A connection failure occurred}
Und hier ist mein ASIHTTPRequest-code für die POST-Anforderung...
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://myrails3app.heroku.com/tournaments/%d/register.json", tid]];
__block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setRequestMethod:@"POST"];
[request addPostValue:username forKey:@"username"];
[request setCompletionBlock:^
{
NSData *responseData = [request responseData];
NSLog(@"Success!");
}];
//Set the code to be called when the request fails
[request setFailedBlock:^
{
NSError *error = [request error];
NSLog(@"Error: %@", [error localizedDescription]);
}];
//Start the request
[request startAsynchronous];
Es ist erwähnenswert, dass, wenn es Fehler hin, Fehler, die sich unglaublich schnell! Auch, für was es Wert ist, meine Schiene 3-app, ich mache die POST-Anforderung an die gehostet wird auf Heroku. Ihre Gedanken?
Vielen Dank für Ihre Weisheit!
InformationsquelleAutor der Frage BeachRunnerFred | 2011-05-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Frage, die ich hatte eine harte Zeit, um herauszufinden, warum. Das problem befindet sich in ASIHTTPRequest selbst (iOS), nicht die rails-code.
Um eine lange Geschichte kurz, das problem ist spezifisch für die Verwendung von persistenten Verbindung für jeder Anfrage gesendet durch ASIHTTPRequest.
Dies ist zwar gut für GET-Anfragen, die meisten server-Implementierung nicht erlaubt persistente Verbindung verwendet werden, mit POST-Anfrage.
Hatte ich nicht wirklich Zeit haben, um es zu untersuchen, die tief auf der server-Seite der Dinge, aber ich denke, das problem liegt bei der 100-Continue header die gesendet werden sollen (und welche nicht) mit der Aufforderung, dass hat Körper befestigt, um es (daher PUT/POST). Wenn Sie wollen, um einen tieferen Blick auf das, was ich spreche, gehen, Lesen Sie auf dem Datenblatt: http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html
Also die persistente Verbindung verwendet ASIHTTPRequest warten für eine 100-Antwort gesendet werden, die nie gesendet. so endet es damit, timed out.
Einen fix zu setzen persistentConnection KEINE mit Ihrer post-Anfragen wie die folgende:
InformationsquelleAutor der Antwort Pier-Olivier Thibault
Sichere Verbindung Fehlgeschlagen
SSL erhalten einen Datensatz mit einer falschen Message Authentication Code.
(Fehler-code: ssl_error_bad_mac_read)
Die Seite, die Sie aufrufen möchten, kann nicht angezeigt werden, da die Authentizität der erhaltenen Daten nicht verifiziert werden konnte.
Bitte Kontaktieren Sie die Website-Besitzer zu informieren, die von diesem problem. Alternativ verwenden Sie den Befehl in das Hilfe-Menü zu melden, diesem gebrochenen Ort.
InformationsquelleAutor der Antwort krishna
Auf iOS 5.1, auch nach dem Upgrade
ASIHTTPRequest
zuASIHTTPRequestVersion
= @"v1.8.1-61 2011-09-19" noch benötigt:InformationsquelleAutor der Antwort pctj101
hatte ich auch einstellen Antwort setHeader Verbindung zum "schließen" von Java-servlet -
InformationsquelleAutor der Antwort Sameeh Harfoush