Gibt es eine einfache Möglichkeit, den http-Statuscode im Fehlerblock von AFHTTPClient abzurufen?

94

Ich sehe, dass es eine Liste akzeptierter http-Statuscodes gibt, die ich ändern kann, aber ich denke, es wäre sauberer, wenn ich den http-Statuscode im Fehlerblock erhalten könnte.

Ok, habe die Antwort mit dem Operationsobjekt gefunden

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

Antworten:

136

Ok, habe die Antwort mit dem Operationsobjekt gefunden

failure:^(AFHTTPRequestOperation *operation, NSError *error){ 
       NSLog(@"error code %d",[operation.response statusCode]);
}];
MonkeyBonkey
quelle
Dies könnte auch hilfreich sein[operation.request HTTPMethod]
defvol
2
Ich weiß, dass dies alt ist, aber @wilhelmbot - HTTPMethod würde Ihnen so etwas wie GET / POST / PUT ... usw. geben, wahrscheinlich nicht hilfreich für die Überprüfung des Antwortstatus.
Shortstuffsushi
111

In neueren Versionen von AFNetworking können Sie das Antwortobjekt aus dem Fehler abrufen:

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

Dies ist praktisch, wenn Sie die Fehlerbehandlung weiter oben durchführen und das Antwortobjekt nicht weitergeben möchten.

Sam
quelle
Möglicherweise müssen Sie zuerst den zugrunde liegenden Fehler abrufen. NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]
Onato
19

Für AFNetworking 3.0 , Verwendung

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

NSInteger operationStatusCode = [operation.error code];

NSInteger httpStatusCode = operation.response.statusCode;

Wenn die Anfragen storniert / nicht erreichbar / Timeout waren, httpStatusCodewird immer sein 0.

Alternativ können Sie das Problem identifizieren, indem Sie die operationStatusCode. Es ist ein NSErrorObjekt.

  • Wenn es / timeout / no network nicht erreichen kann, um die Anforderung zu verarbeiten, operationStatusCodewird dies der Fall sein -1009.
  • Wenn Sie die Operationswarteschlange abbrechen, operationStatusCodewird dies der Fall sein -999.

Sie können alle anderen NSErrorCodes und ihre Beschreibungen in der Apple-Dokumentation überprüfen

c0deslayer
quelle
7

Ich konnte den Statuscode mit Swift 3 erhalten:

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

Es ist Arbeit für mich Fügen Sie Ihrer Anfrage die folgende Zeile hinzu

manager.requestSerializer = [AFJSONRequestSerializer serializer];


quelle