Richtige Behandlung von Weiterleitungen mit NSURLConnection
Zu diesem Zweck werde ich so tun, als wäre die ursprüngliche URLhttp://host/form
und die neue url isthttps://host/form
. (Beachten Sie, dass beide URLs sicher sind, bevor ich sie versende. Die nicht sicher zu sichere Weiterleitung scheint jedoch eine praktische Möglichkeit zu sein, dies zu testen.)
Ich greife über auf eine Web-API zuNSURLConnection
das leitet mich weiter. Grundsätzlich möchte ich alles nehmen, was ich gerade eingereicht habehttp://hostaform
und senden Sie es erneut anhttps://host/form
. Ich dachte, dies wäre das Standardverhalten, aber es sieht so aus, als würde der Körper im Redirect verloren gehen.
Also denke ich, ich muss mit dem umgehenconnection:willSendRequest:redirectResponse:
Ereignis desNSURLConnection
's delegieren und befestigen Sie den Körper. Das Problem ist, dass diese Nachricht leider nicht ausreichend dokumentiert ist. Die einzige Information, die ich über diese Methode finden kann, istNSURLConnection-Klassenreferenz, was nicht sehr hilfreich ist. Dazu gehört unter anderem:
Ich bin mir nicht sicher, was das bedeutet. Kombiniert mit einer InitialewillSendRequest:
Anrufung, ich denke, das ist MittelwillSendRequest:
wird bereits für meine erste Anfrage vor der Umleitungsantwort gesendet. Ist das korrekt?
Deshalb habe ich meinem Stellvertreter Code hinzugefügt, um den Körper eine zusätzliche Zeit lang beizubehalten, und dies hinzugefügtwillSendRequest:
Handler:
- (NSURLRequest *)connection: (NSURLConnection *)inConnection
willSendRequest: (NSURLRequest *)inRequest
redirectResponse: (NSURLResponse *)inRedirectResponse;
{
if (inRedirectResponse) {
NSMutableURLRequest *r = [[inRequest mutableCopy] autorelease];
[r setURL: [inRedirectResponse URL]];
[r setHTTPBody: body];
return r;
} else {
return inRequest;
}
}
Es funktioniert nicht Aber ich bin mir nicht mal sicher, ob dies der richtige Ansatz ist. Es scheint mir übermäßig hackisch. Was soll ich machen Ist das irgendwo dokumentiert? Bisher habe ich in der Dokumentation von Apple oder bei der Verwendung von Google nichts Nützliches gefunden.
(Dies ist auf dem iPhone, obwohl es in diesen Klassen keinen großen Unterschied zu geben scheint.)