чи є простий спосіб отримати код стану 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

111

У новіших версіях AFNetworking ви можете отримати об'єкт відповіді з помилки:

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

Це зручно, якщо ви обробляєте помилки далі по лінії і не хочете обходити об'єкт відповіді.


Можливо, вам доведеться спочатку отримати основну помилку. NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]
Onato

19

Для AFNetworking 3.0 використовуйте

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

13

NSInteger operationStatusCode = [код операції.помилки];

NSInteger httpStatusCode = operation.response.statusCode;

Якщо запити були скасовані / недосяжні / час очікування, httpStatusCodeбуде завжди 0.

Крім того, ви можете визначити проблему, зрозумівши operationStatusCode. Це NSErrorОб'єкт.

  • Якщо він не може досягти / час очікування / немає мережі для обробки запиту, operationStatusCodeбуде -1009.
  • Якщо ви скасуєте чергу операцій, operationStatusCodeбуде -999.

Ви можете перевірити всі інші NSErrorкоди та їх описи в документації Apple


7

Я зміг отримати код стану за допомогою Swift 3:

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

0

Це працює для мене. Додайте нижчий рядок до вашого запиту

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.