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

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

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

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

6 ответов

Решение

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

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

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

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

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

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

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

NSInteger operationStatusCode = [код операции.error];

NSInteger httpStatusCode = operation.response.statusCode;

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

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

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

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

Я смог получить код состояния с помощью Swift 3:

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

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

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

Другие вопросы по тегам