Prawidłowa obsługa przekierowań za pomocą NSURLConnection

W tym celu zamierzam udawać, że oryginalny adres URL jesthttp://host/form a nowy adres URL tohttps://host/form. (Pamiętaj, że zanim to wyślę, oba adresy URL będą bezpieczne. Jednak niezabezpieczony wydaje się wygodnym przekierowaniem do przetestowania tego.)

Korzystam z interfejsu WWW za pomocąNSURLConnection to mnie przekierowuje. Zasadniczo chcę wziąć wszystko, co właśnie przedłożyłemhttp://hostaform i prześlij go ponowniehttps://host/form. Myślałem, że to będzie zachowanie domyślne, ale wygląda na to, że ciało jest zagubione w przekierowaniu.

Więc myślę, że muszę poradzić sobieconnection:willSendRequest:redirectResponse: wydarzenieNSURLConnectiondelegat i załóż ciało ponownie. Problem polega na tym, że ta wiadomość wydaje się żałośnie niedostatecznie udokumentowana. Jedyne informacje, jakie mogę znaleźć w tej metodzie toOdniesienie do klasy NSURLConnection, co nie jest zbyt pomocne. Między innymi obejmuje to:

redirectResponse: Odpowiedź URL, która spowodowała przekierowanie. Może być zerowa w przypadkach, gdy ta metoda nie jest wysyłana w wyniku zaangażowania delegata w przetwarzanie przekierowania.

Nie wiem, co to znaczy. W połączeniu z początkiemwillSendRequest: inwokacja, myślę, że to znaczywillSendRequest: jest wysyłany nawet na moją pierwszą prośbę, przed odpowiedzią przekierowującą. Czy to jest poprawne?

Dodałem więc kod do mojego delegata, aby zachować ciało na dodatkowy czas i dodał towillSendRequest: treser:

- (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;
    }
}

To nie działa. Ale nie jestem nawet pewien, czy jest to właściwe podejście. Wydaje mi się to zbyt hackowe. Co powinienem robić Czy jest to udokumentowane w dowolnym miejscu? Nie znalazłem niczego przydatnego w dokumentacji Apple ani w Google.

(To jest na iPhonie, choć w tych klasach nie ma zbyt dużej różnicy.)

questionAnswers(4)

yourAnswerToTheQuestion