есть ли простой способ получить код состояния 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);
}
swapnilagarwal
источник
13

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

NSInteger httpStatusCode = operation.response.statusCode;

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

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

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

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

c0deslayer
источник
7

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

((error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey])
    as! HTTPURLResponse).statusCode
хасан
источник
0

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

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


источник