El manejo redirige correctamente con NSURLConnection

A los efectos de esto, voy a pretender que la url original eshttp://host/form y la nueva url eshttps://host/form. (Tenga en cuenta que antes de enviar esto, ambas direcciones URL serán seguras. Sin embargo, lo que no es seguro para la seguridad parece ser una redirección conveniente para probar esto).

Estoy accediendo a una API web usandoNSURLConnection Eso me redirige. Básicamente, quiero llevar todo lo que acabo de enviar ahttp://hostaform y re-enviarlo ahttps://host/form. Pensé que este sería el comportamiento predeterminado, pero parece que el cuerpo se está perdiendo en la redirección.

Así que creo que necesito manejar elconnection:willSendRequest:redirectResponse: evento de laNSURLConnection's delegado y volver a adjuntar el cuerpo. El problema es que este mensaje parece muy poco documentado. La única información que puedo encontrar sobre este método esReferencia de la clase NSURLConnection, lo cual no es de mucha ayuda. Entre otras cosas, incluye esto:

redireccionar respuesta: La respuesta URL que causó la redirección. Puede ser nulo en los casos en que este método no se envía como resultado de involucrar al delegado en el procesamiento de redireccionamiento.

No estoy seguro de lo que esto significa. Combinado con una inicialwillSendRequest: invocación, creo que esto es mediowillSendRequest: se está enviando incluso para mi solicitud inicial, antes de la respuesta de redirección. ¿Es eso correcto?

Así que agregué código a mi delegado para retener el cuerpo un tiempo adicional, y agregué estowillSendRequest: entrenador de animales:

- (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;
    }
}

No funciona Pero ni siquiera estoy seguro de si este es el enfoque correcto. Me parece excesivamente hacker. ¿Qué debería estar haciendo? ¿Está esto documentado en alguna parte? No he encontrado nada útil en la documentación de Apple o en el uso de Google hasta ahora.

(Esto está en el iPhone, aunque no parece haber mucha diferencia en estas clases).

Respuestas a la pregunta(4)

Su respuesta a la pregunta