web-dev-qa-db-ja.com

HTTPエラー中に応答本文を取得する方法はありますか?

私は時々HTTP 403エラーをスローするAPIを使用しており、応答本文はjsonの形式で追加情報を提供できますが、私の人生では、Alamofireから情報を取得することはできません応答オブジェクト。クロム経由でAPIにアクセスすると、開発者ツールに情報が表示されます。私のコードは次のとおりです。

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エラーの場合に応答本文を返してくれないようです。回避策やここで不足しているものはありますか?

38
Kevin DiTraglia

私は彼らのgithubページでこの質問をし、cnoonから回答を得ました:

スイフト2:

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

スウィフト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を取得できます。

78
Kevin DiTraglia