c'è un modo semplice per ottenere il codice di stato http nel blocco di errore da AFHTTPClient?


94

Vedo che c'è un elenco di codici di stato http accettati che posso modificare, ma penso che sarebbe più pulito se riesco a ottenere il codice di stato http nel blocco di errore ..

Ok, ho trovato la risposta con l'oggetto operazione

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

Risposte:


136

Ok, ho trovato la risposta con l'oggetto operazione

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

Anche questo potrebbe essere utile[operation.request HTTPMethod]
defvol

2
So che questo è vecchio, ma @wilhelmbot - HTTPMethod ti darebbe qualcosa come GET / POST / PUT ... ecc., Probabilmente non è utile per controllare lo stato della risposta.
shortstuffsushi

111

Nelle versioni più recenti di AFNetworking, puoi recuperare l'oggetto risposta dall'errore:

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

Questo è utile se stai eseguendo la gestione degli errori più in alto nella riga e non vuoi passare intorno all'oggetto risposta.


Potrebbe essere necessario ottenere prima l'errore sottostante. NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]
Onato

19

Per AFNetworking 3.0 , utilizzare

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;

Se le richieste sono state annullate / irraggiungibili / timeout, httpStatusCodesarà sempre 0.

In alternativa puoi identificare il problema comprendendo il operationStatusCode. È un NSErroroggetto.

  • Se non riesce a raggiungere / timeout / nessuna rete per elaborare la richiesta, operationStatusCodesarà -1009.
  • Se annulli la coda delle operazioni, il file operationStatusCodesarà -999.

Puoi controllare tutti gli altri NSErrorcodici e le loro descrizioni nella documentazione di Apple


7

Sono riuscito a ottenere il codice di stato con Swift 3:

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

0

Per me funziona Aggiungi la riga di seguito alla tua richiesta

manager.requestSerializer = [AFJSONRequestSerializer serializzatore];

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.