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]);
}];
MonkeyBonkey
źródło

Odpowiedzi:

136

Ok, znalazłem odpowiedź z obiektem operacji

failure:^(AFHTTPRequestOperation *operation, NSError *error){ 
       NSLog(@"error code %d",[operation.response statusCode]);
}];
MonkeyBonkey
źródło
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.

Sam
źródło
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);
}
swapnilagarwal
źródło
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

c0deslayer
źródło
7

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

((error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey])
    as! HTTPURLResponse).statusCode
hasan
źródło
0

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

manager.requestSerializer = [serializator AFJSONRequestSerializer];


źródło