existe-t-il un moyen facile d'obtenir le code d'état http dans le bloc d'échec d'AFHTTPClient?


94

Je vois qu'il existe une liste de codes d'état http acceptés que je peux modifier, mais je pense que ce serait plus propre si je pouvais obtenir le code d'état http dans le bloc d'échec.

Ok, j'ai trouvé la réponse avec l'objet opération

failure:^(AFHTTPRequestOperation *operation, NSError *error){ 
        NSLog(@"error code %d",[operation.response statusCode]);
}];

Réponses:


136

Ok, j'ai trouvé la réponse avec l'objet opération

failure:^(AFHTTPRequestOperation *operation, NSError *error){ 
       NSLog(@"error code %d",[operation.response statusCode]);
}];

Cela pourrait également être utile[operation.request HTTPMethod]
defvol

2
Je sais que c'est vieux, mais @wilhelmbot - HTTPMethod vous donnerait quelque chose comme GET / POST / PUT ... etc, probablement pas utile pour vérifier l'état de la réponse.
shortstuffsushi

111

Dans les versions plus récentes d'AFNetworking, vous pouvez récupérer l'objet de réponse de l'erreur:

[[[error userInfo] objectForKey:AFNetworkingOperationFailingURLResponseErrorKey] statusCode]

Ceci est pratique si vous effectuez une gestion des erreurs plus haut dans la ligne et que vous ne voulez pas passer autour de l'objet de réponse.


Vous devrez peut-être d'abord obtenir l'erreur sous-jacente. NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]
Onato

19

Pour AFNetworking 3.0 , utilisez

failure:^(NSURLSessionTask *operation, NSError *error) {
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)operation.response;
    httpResponse.statusCode;
    NSLog(@"status code: %li", (long)httpResponse.statusCode);
}

13

NSInteger operationStatusCode = [code erreur.opération];

NSInteger httpStatusCode = operation.response.statusCode;

Si les demandes ont été annulées / inaccessibles / expirées, le httpStatusCodesera toujours 0.

Vous pouvez également identifier le problème en comprenant le operationStatusCode. C'est un NSErrorobjet.

  • S'il ne peut pas atteindre / timeout / aucun réseau pour traiter la demande, le operationStatusCodesera -1009.
  • Si vous annulez la file d'attente des opérations, le operationStatusCodesera -999.

Vous pouvez vérifier tous les autres NSErrorcodes et leurs descriptions dans la documentation Apple


7

J'ai pu obtenir le code d'état avec Swift 3:

((error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey])
    as! HTTPURLResponse).statusCode

0

Ça marche pour moi Ajouter la ligne ci-dessous à votre demande

manager.requestSerializer = [sérialiseur AFJSONRequestSerializer];

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.