94 votes

Existe-t-il un moyen simple d'obtenir le code d'état http dans le bloc d'échec de AFHTTPClient ?

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 d'opération

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

136voto

MonkeyBonkey Points 4169

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

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

0 votes

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

2 votes

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

111voto

Sam Points 2561

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

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

C'est pratique si vous faites de la gestion d'erreur plus loin dans la ligne et que vous ne voulez pas transmettre l'objet de réponse.

0 votes

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

19voto

swapnilagarwal Points 588

Pour AFNetworking 3.0 utiliser

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

13voto

c0deslayer Points 129

NSInteger operationStatusCode = [operation.error code] ;

NSInteger httpStatusCode = operation.response.statusCode ;

Si les demandes ont été annulées, inaccessibles ou ont dépassé le délai d'attente, httpStatusCode sera toujours 0 .

Alternativement, vous pouvez identifier le problème en comprenant les éléments suivants operationStatusCode . Il s'agit d'un NSError Objet.

  • S'il ne peut pas atteindre/temps mort/absence de réseau pour traiter la demande, la operationStatusCode sera -1009 .
  • Si vous annulez la file d'attente des opérations, la operationStatusCode sera -999 .

Vous pouvez vérifier tous les autres NSError et leurs descriptions dans La documentation d'Apple

7voto

hasan Points 4225

J'ai réussi à obtenir le code d'état avec Swift 3 :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X