Есть ли простой способ получить код состояния 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 сериализатор];