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]);
}];
SingeBonkey
la source

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]);
}];
SingeBonkey
la source
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.

Sam
la source
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);
}
swapnilagarwal
la source
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

c0deslayer
la source
7

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

((error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey])
    as! HTTPURLResponse).statusCode
hasan
la source
0

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

manager.requestSerializer = [sérialiseur AFJSONRequestSerializer];


la source