web-dev-qa-db-fra.com

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

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

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

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

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

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

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 gérez les erreurs plus loin sur la ligne et que vous ne voulez pas contourner l'objet de réponse.

109
Sam

Pour AFNetworking 3.0 , utilisez 

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

NSInteger operationStatusCode = [code d'opération.error];

NSInteger httpStatusCode = operation.response.statusCode;

Si les demandes ont été annulées/inaccessibles/expirées, httpStatusCode sera toujours 0

Sinon, vous pouvez identifier le problème en comprenant operationStatusCode. C'est un objet NSError

  • S'il ne peut pas atteindre/timeout/no network 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 codes NSError et leurs descriptions dans Documentation Apple

13
c0deslayer

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

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

C'est un travail pour moi Ajouter la ligne ci-dessous à votre demande

manager.requestSerializer = [sérialiseur AFJSONRequestSerializer]; 

0
user859952