2016-01-29 8 views
16

時々HTTP 403エラーをスローするAPIに当たっています。レスポンス本体はjsonの形でいくつかの追加情報を与えることができますが、私の人生では情報を元に戻すことができませんAlamofire応答オブジェクト。 Chromeを使用してAPIにアクセスすると、デベロッパーツールの情報が表示されます。ここに私のコードは次のとおりです。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? 
    } 

私はかなり応答に添付のすべてのオブジェクトを照会しましたが、戻ってHTTPエラーの場合は私にレスポンスボディを与えていないようです。回避策や、ここで欠けているものはありますか?

答えて

47

私は彼らのgithubのページにこの質問をして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

私はちょうどエンコーディング部分を残して、これを行うことで応答を得ることができますjsonエラーの場合でも

+2

エンコーディングは次のとおりです: 'String(data:data、encoding:String.Encoding.utf8)' – Dilapidus

+0

'SwiftyJSON'を使用している場合、' JSON( response.data!) ' –

関連する問題