В целях этого я буду притворяться, что исходный url имеет значение http://host/form
, а новый url - https://host/form
. (Обратите внимание, что до того, как я отправлю это, оба URL-адреса будут защищены. Однако небезопасное для защиты похоже на удобное перенаправление для проверки этого.)
Я обращаюсь к веб-API с помощью NSURLConnection
, который перенаправляет меня. В принципе, я хочу взять все, что я только что передал http://hostaform
, и повторно отправить его на https://host/form
. Я думал, что это будет поведение по умолчанию, но похоже, что тело теряется в перенаправлении.
Итак, мне нужно обработать событие connection:willSendRequest:redirectResponse:
делегата NSURLConnection
и снова присоединить тело. Проблема в том, что это сообщение, по-видимому, недооценивается. Единственная информация, которую я могу найти в этом методе, - Ссылка на класс NSURLConnection, что не очень полезно. Среди прочего, он включает в себя следующее:
redirectResponse: ответ URL, который вызвал перенаправление. Может быть ноль в случаях, когда этот метод не отправляется в результате привлечения делегата в обработку переадресации.
Я не уверен, что это значит. В сочетании с инициалом 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, хотя, похоже, в этих классах нет большой разницы.)