¿Alguna forma de obtener el cuerpo de la respuesta durante los errores HTTP?


Estoy golpeando una API que de vez en cuando lanzará un error HTTP 403, y el cuerpo de respuesta puede dar alguna información adicional en forma de json, sin embargo, para la vida de mí no puedo parecer obtener la información de vuelta de los objetos de respuesta Alamofire. Veo la información en herramientas para desarrolladores si golpeo la API a través de Chrome. Aquí está mi código:

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?
    }

He consultado casi todos los objetos adjuntos a la respuesta, pero no parece que me devuelva el cuerpo de la respuesta en el caso de Errores HTTP. ¿Hay una solución o algo que me estoy perdiendo aquí?

Author: Kevin DiTraglia, 2016-01-29

1 answers

Hice esta pregunta en su página de github y obtuve una respuesta 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

Acabo de dejar fuera la parte de codificación, haciendo esto usted es capaz de obtener la respuesta json incluso en el caso de errores.

 61
Author: Kevin DiTraglia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-11 00:52:12