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