есть ли простой способ получить код состояния http в блоке отказа от AFHTTPClient?


94

Я вижу, что есть список принятых кодов статуса http, которые я могу изменить, но я думаю, было бы чище, если бы я мог получить код статуса http в блоке сбоя ..

Хорошо, нашел ответ с операционным объектом

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

Ответы:


136

Хорошо, нашел ответ с операционным объектом

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

Это также может быть полезно[operation.request HTTPMethod]
defvol

2
Я знаю, что это старый, но @wilhelmbot - HTTPMethod даст вам что-то вроде GET / POST / PUT ... и т. Д., Вероятно, бесполезно для проверки статуса ответа.
shortstuffsushi 08

111

В более новых версиях AFNetworking вы можете получить объект ответа из ошибки:

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

Это удобно, если вы выполняете обработку ошибок дальше по строке и не хотите передавать объект ответа.


Возможно, вам сначала потребуется получить основную ошибку. NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]
Onato 06

19

Для AFNetworking 3.0 используйте

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

13

NSInteger operationStatusCode = [код ошибки операции];

NSInteger httpStatusCode = operation.response.statusCode;

Если запросы были отменены / недоступны / тайм-аут, httpStatusCodeбудет всегда 0.

В качестве альтернативы вы можете определить проблему, изучив файл operationStatusCode. Это NSErrorобъект.

  • Если он не может достичь / тайм-аут / нет сети для обработки запроса, operationStatusCodeбудет -1009.
  • Если отменить очередь операций, то operationStatusCodeбудет -999.

Вы можете проверить все остальные NSErrorкоды и их описания в документации Apple.


7

Мне удалось получить код состояния с помощью Swift 3:

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

0

Это работает для меня Добавьте строку ниже к вашему запросу

manager.requestSerializer = [сериализатор AFJSONRequestSerializer];

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.