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

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

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

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

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

Операция NSIntegerStatusCode = [код операции .error];

NSInteger httpStatusCode = operation.response.statusCode;

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

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

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

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

Ответ 5

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

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

Ответ 6

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

manager.requestSerializer = [AFJSONRequestSerializer serializer];