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:
wydarzenieNSURLConnection
delegat 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:
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.)