Manipulando redirecionamentos corretamente com NSURLConnection
Para o propósito disto, eu vou fingir que o URL original éhttp://host/form
e o novo URL éhttps://host/form
. (Observe que, antes de enviar isso, as duas URLs serão seguras. No entanto, o não seguro para proteger parece ser um redirecionamento conveniente para testar isso.)
Estou acessando uma API da web usandoNSURLConnection
que me redireciona. Basicamente, eu quero levar tudo o que acabei de submeterhttp://hostaform
e reenvie-o parahttps://host/form
. Eu pensei que este seria o comportamento padrão, mas parece que o corpo está sendo perdido no redirecionamento.
Então eu acho que preciso lidar com oconnection:willSendRequest:redirectResponse:
evento doNSURLConnection
é delegar e reconectar o corpo. O problema é que esta mensagem parece insuficientemente documentada. A única informação que posso encontrar sobre este método éReferência de Classe NSURLConnection, o que não é muito útil. Entre outras coisas, inclui isso:
Não tenho certeza do que isso significa. Combinado com uma inicialwillSendRequest:
invocação, eu acho que isso é meiowillSendRequest:
está sendo enviado mesmo para minha solicitação inicial, antes da resposta de redirecionamento. Isso está correto?
Então eu adicionei código ao meu delegado para manter o corpo por um tempo extra, e adicionei issowillSendRequest:
manipulador:
- (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;
}
}
Não funciona Mas nem tenho certeza se essa é a abordagem correta. Parece excessivamente hackish para mim. O que devo fazer? Isso está documentado em algum lugar? Não encontrei nada de útil na documentação da Apple ou usando o Google até agora.
(Isso está no iPhone, embora não pareça haver muita diferença nessas classes.)