czy istnieje łatwy sposób na uzyskanie kodu stanu HTTP w bloku błędu z AFHTTPClient?


94

Widzę, że istnieje lista akceptowanych kodów statusu http, które mogę zmodyfikować, ale myślę, że byłoby czystsze, gdybym mógł uzyskać kod statusu http w bloku błędu.

Ok, znalazłem odpowiedź z obiektem operacji

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

Odpowiedzi:


136

Ok, znalazłem odpowiedź z obiektem operacji

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

To może być również pomocne[operation.request HTTPMethod]
defvol

2
Wiem, że to jest stare, ale @wilhelmbot - HTTPMethod dałoby coś takiego jak GET / POST / PUT ... itd., Prawdopodobnie nie jest pomocne przy sprawdzaniu statusu odpowiedzi.
shortstuffsushi

111

W nowszych wersjach AFNetworking można pobrać obiekt odpowiedzi z błędu:

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

Jest to przydatne, jeśli wykonujesz obsługę błędów w dalszej części wiersza i nie chcesz przekazywać obiektu odpowiedzi.


Może być konieczne najpierw pobranie podstawowego błędu. NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]
Onato

19

W przypadku AFNetworking 3.0 użyj

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

13

NSInteger operationStatusCode = [operation.error code];

NSInteger httpStatusCode = operation.response.statusCode;

Jeśli żądania zostały anulowane / nieosiągalne / httpStatusCodeprzekroczony limit czasu, będzie zawsze 0.

Alternatywnie możesz zidentyfikować problem, rozumiejąc operationStatusCode. To jest NSErrorprzedmiot.

  • Jeśli nie może dotrzeć do / operationStatusCodeprzekroczenie limitu czasu / brak sieci do przetworzenia żądania, plik will -1009.
  • Jeśli anulujesz kolejkę operacji, plik operationStatusCodewill -999.

Możesz sprawdzić wszystkie inne NSErrorkody i ich opisy w dokumentacji Apple


7

Udało mi się uzyskać kod statusu w Swift 3:

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

0

To dla mnie praca Dodaj poniższy wiersz do swojej prośby

manager.requestSerializer = [serializator AFJSONRequestSerializer];

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.