Ответ 1
Хорошо, нашел ответ с объектом операции
failure:^(AFHTTPRequestOperation *operation, NSError *error){
NSLog(@"error code %d",[operation.response statusCode]);
}];
Я вижу, что есть список принятых кодов статуса http, которые я могу изменить, но я думаю, что было бы чище, если я могу получить код статуса http в блоке отказов.
Хорошо, нашел ответ с объектом операции
failure:^(AFHTTPRequestOperation *operation, NSError *error){
NSLog(@"error code %d",[operation.response statusCode]);
}];
Хорошо, нашел ответ с объектом операции
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);
}
Операция NSIntegerStatusCode = [код операции .error];
NSInteger httpStatusCode = operation.response.statusCode;
Если запросы были отменены/недоступны/таймаут, httpStatusCode
будет всегда 0
.
В качестве альтернативы вы можете определить проблему, поняв operationStatusCode
. Это объект NSError
.
operationStatusCode
будет -1009
.operationStatusCode
будет -999
.Вы можете проверить все остальные коды NSError
и их описания в документации Apple
((error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey])
as! HTTPURLResponse).statusCode
Это работает для меня Добавьте строку ниже к вашему запросу
manager.requestSerializer = [AFJSONRequestSerializer serializer];