NSURLRequest: Comment gérer un redirigé post?

J'ai essayé et testé l'utilisation de NSURLRequest (et accompagnements) la mise en œuvre, qui fonctionne très bien pour l'Obtient, et des Postes pour une URL donnée.

Cependant, je veux maintenant déplacer la cible de l'URL sans changer l'URL utilisée par l'application, donc j'ai l'intention d'utiliser une webhop rediriger via mon fournisseur de DNS.

Cela fonctionne très bien pour les requêtes GET, mais les POSTs juste accrocher... pas de connexion réponse est reçue.

Pertinentes iOS méthode de traitement d'une redirection est,

-(NSURLRequest *)connection:(NSURLConnection *)connection
    willSendRequest:(NSURLRequest *)request
    redirectResponse:(NSURLResponse *)redirectResponse

Selon la documentation d'Apple (la manipulation des redirections),

Si le délégué ne pas mettre en œuvre de connexion:willSendRequest:redirectResponse:, tous les canonique changements et le serveur redirige sont autorisés.

Bien, ce n'est pas mon expérience, car en laissant cette méthode ne fonctionne pas pour moi. La demande se bloque sans réponse.

Apple propose en outre la mise en œuvre, de willSendRequest (voir ci-dessus liés dans la documentation d'Apple), encore une fois cela ne fonctionne pas pour moi. Je vois les invocations, mais la demande tout simplement l'accrocher.

Mon actuel de la mise en œuvre de willSendRequest est comme suit (voir ci-dessous). Il fait suite à la redirection, mais les poignées de la demande comme si c'était un OBTENIR, plutôt que d'un POSTE.

Je crois que le problème, c'est que la redirection est en train de perdre le fait que la requête HTTP est un POST (il y a peut être plus de problèmes, tels que la réalisation de la demande du Corps en avant trop?).

Je ne suis pas sûr de ce que je devrais faire ici. Donc, tous les conseils sur la façon de gérer correctement un POST qui reçoit une redirection serait appréciée. Merci.

-(NSURLRequest *)connection:(NSURLConnection *)connection
   willSendRequest:(NSURLRequest *)request
  redirectResponse:(NSURLResponse *)redirectResponse
{

    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) redirectResponse;

    int statusCode = [httpResponse statusCode];


    NSLog (@"HTTP status %d", statusCode);

    //http statuscodes between 300 & 400 is a redirect ...
    if (httpResponse && statusCode >= 300 && statusCode < 400)
    {
        NSLog(@"willSendRequest (from %@ to %@)", redirectResponse.URL, request.URL);
    }

    if (redirectResponse)
    {
        NSMutableURLRequest *newRequest = [request mutableCopy]; //original request

       [newRequest setURL: [request URL]];

       NSLog (@"redirected");

       return newRequest;
    }
    else
    {
        NSLog (@"original");

       return request;
    }
}

DES INFORMATIONS SUPPLÉMENTAIRES 1

HTTP code reçu par willSendRequest est de 301 - 'Déplacée de façon Permanente.

À l'aide de allHTTPHeaderFields pour extraire les champs d'en-tête, je vois qu'il demande a l'origine j'soumettre a l'en-tête

HTTP header {
  "Content-Length" = 244;
  "Content-Type" = "application/json";
}

...et le copié /redirigé demande a la tête de,

Redirect HTTP header {
  Accept = "*/*";
  "Accept-Encoding" = "gzip, deflate";
  "Accept-Language" = "en-us";
  "Content-Type" = "application/json";
}

...qui ne ressemble pas à une copie de la demande initiale, ou même un sur-ensemble.

OriginalL'auteur Snips | 2012-05-28