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:

redirectResponse: A resposta da URL que causou o redirecionamento. Pode ser nulo nos casos em que esse método não está sendo enviado como resultado do envolvimento do delegado no processamento de redirecionamento.

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.)

questionAnswers(4)

yourAnswerToTheQuestion