2016-01-29 16 views
16

Uderzam w API, które od czasu do czasu rzuca błąd HTTP 403, a ciało odpowiedzi może podać dodatkowe informacje w formie jsona, jednak w moim życiu nie mogę uzyskać informacji z powrotem od obiekty odpowiedzi Alamofire. Widzę informacje w narzędziach dla deweloperów, jeśli kliknę w API przez chrome. Oto mój kod:Jakikolwiek sposób uzyskania treści odpowiedzi podczas błędów 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? 
    } 

Mam pytani prawie każdy obiekt dołączony do odpowiedzi, ale nie wydaje mi dać organizmowi odpowiedź z powrotem w przypadku błędów HTTP. Czy jest jakieś obejście, czy coś, czego tu brakuje?

Odpowiedz

47

Poprosiłem to pytanie na ich stronie github i dostał odpowiedź od 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

Właśnie pominięto część kodującą, dzięki temu można uzyskać odpowiedź json nawet w przypadku błędów.

+2

A teraz (XC8.1, Swift 3) kodowanie to: 'String (dane: dane, kodowanie: String.Encoding.utf8)' – Dilapidus

+0

Jeśli używasz 'SwiftyJSON', możesz również:' JSON (response.data!) " –

Powiązane problemy