web-dev-qa-db-fra.com

Est-il possible d'obtenir le corps de réponse lors d'erreurs HTTP?

Je frappe une API qui générera occasionnellement une erreur HTTP 403, et le corps de la réponse peut donner des informations supplémentaires sous la forme de json, mais pour la vie de moi, je n'arrive pas à récupérer les informations de l'Alamofire objets de réponse. Je vois les informations dans les outils de développement si je frappe l'API via Chrome. Voici mon code:

Alamofire.request(mutableURLRequest).validate().responseJSON() {
    (response) in
    switch response.result {
        case .Success(let data):
            if let jsonResult = data as? NSDictionary {
                completion(jsonResult, error: nil)
            } else if let jsonArray = data as? NSArray {
                let jsonResult = ["array" : jsonArray]
                completion(jsonResult, error: nil)
            }
        case .Failure(let error):
            //error tells me 403
            //response.result.data can't be cast to NSDictionary or NSArray like
            //the successful cases, how do I get the response body?
    }

J'ai interrogé à peu près tous les objets attachés à la réponse, mais cela ne semble pas me rendre le corps de la réponse dans le cas d'erreurs HTTP. Y a-t-il une solution de contournement ou quelque chose qui me manque ici?

38
Kevin DiTraglia

J'ai posé cette question sur leur page github et j'ai obtenu une réponse de cnoon:

Swift 2:

if let data = response.data {
    let json = String(data: data, encoding: NSUTF8StringEncoding)
    print("Failure Response: \(json)")
}

Swift 3:

if let data = response.data {
    let json = String(data: data, encoding: String.Encoding.utf8)
    print("Failure Response: \(json)")
}

https://github.com/Alamofire/Alamofire/issues/1059

Je viens de laisser de côté la partie encodage, ce faisant, vous pouvez obtenir la réponse json même en cas d'erreurs.

78
Kevin DiTraglia