2016-01-29 44 views
16

Sto colpendo un'API che occasionalmente genera un errore HTTP 403 e il corpo della risposta può fornire alcune informazioni aggiuntive sotto forma di JSON, tuttavia per la vita di me non riesco a recuperare le informazioni da gli oggetti di risposta Alamofire. Vedo le informazioni negli strumenti di sviluppo se colpisco l'API tramite chrome. Ecco il mio codice:Un modo per ottenere il corpo della risposta durante gli errori HTTP?

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

ho interrogato praticamente ogni oggetto attaccato alla risposta, ma non mi sembra dare al corpo risposta indietro nel caso di errori HTTP. C'è un work-around o qualcosa che mi manca qui?

risposta

47

Ho fatto questa domanda sulla loro pagina di GitHub e ottenuto una risposta da cnoon:

rapida 2:

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

rapida 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

ho appena lasciato fuori la parte di codifica, facendo questo si è in grado di ottenere la risposta JSON anche in caso di errori.

+2

E ora (XC8.1, Swift 3) quella codifica è: 'String (dati: dati, codifica: String.Encoding.utf8)' – Dilapidus

+0

Se si utilizza 'SwiftyJSON', è anche possibile:' JSON (response.data!) ' –