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:

redirectResponse: Die URL-Antwort, die die Umleitung verursacht hat. Ist möglicherweise null, wenn diese Methode nicht gesendet wird, weil der Delegat in die Umleitungsverarbeitung einbezogen wurde.

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.)

Antworten auf die Frage(4)

Ihre Antwort auf die Frage