Для этого я собираюсь представить, что исходный URL-адрес http://host/form
, а новый URL-адрес https://host/form
. (Обратите внимание, что до того, как я отправлю это, оба URL-адреса будут безопасными. Однако переход от незащищенного к безопасному кажется удобным перенаправлением для проверки.)
Я получаю доступ к веб-API, используя NSURLConnection
, который меня перенаправляет. По сути, я хочу взять все, что я только что отправил в http://hostaform
, и повторно отправить это в https://host/form
. Я думал, что это будет поведение по умолчанию, но похоже, что тело теряется при перенаправлении.
Поэтому я думаю, что мне нужно обработать событие connection:willSendRequest:redirectResponse:
делегата NSURLConnection
и повторно прикрепить тело. Проблема в том, что это сообщение выглядит крайне недокументированным. Единственная информация, которую я могу найти об этом методе, - это Ссылка на класс NSURLConnection, которая не очень полезна. Среди прочего, в него входит:
redirectResponse: The URL response that caused the redirect. May be nil in cases where this method is not being sent as a result of involving the delegate in redirect processing.
Я не понимаю, что это значит. В сочетании с первоначальным вызовом willSendRequest:
, я думаю, это означает, что willSendRequest:
отправляется даже для моего первоначального запроса до ответа перенаправления. Это правильно?
Итак, я добавил код своему делегату, чтобы сохранить тело еще раз, и добавил этот willSendRequest:
обработчик:
- (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;
}
}
Не работает. Но я даже не уверен, что это правильный подход. Мне это кажется излишне хакерским. Что мне делать? Это где-нибудь задокументировано? Я пока не нашел ничего полезного ни в документации Apple, ни в использовании Google.
(Это на iPhone, хотя, похоже, нет большой разницы в этих классах.)