Ios 有什么方法可以在HTTP错误期间获取响应正文?

Ios 有什么方法可以在HTTP错误期间获取响应正文?,ios,swift,httpresponse,alamofire,http-status-code-403,Ios,Swift,Httpresponse,Alamofire,Http Status Code 403,我遇到了一个API,它偶尔会抛出HTTP 403错误,响应体可以以json的形式提供一些额外的信息,但是在我的一生中,我似乎无法从Alamofire响应对象中获取信息。如果我通过chrome访问API,我会在开发者工具中看到这些信息。这是我的密码: Alamofire.request(mutableURLRequest).validate().responseJSON() { (response) in switch response.result { case

我遇到了一个API,它偶尔会抛出HTTP 403错误,响应体可以以json的形式提供一些额外的信息,但是在我的一生中,我似乎无法从Alamofire响应对象中获取信息。如果我通过chrome访问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错误的情况下,它似乎没有返回响应体。我在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)")
}


我只是省略了编码部分,通过这样做,即使在出现错误的情况下,您也可以获得响应json。

Swift 5在DefaultDataResponse扩展中轻松获得正文响应:

String(data: data!, encoding: String.Encoding.utf8)

现在(XC8.1,Swift 3)的编码是:
String(数据:数据,编码:String.encoding.utf8)
如果您使用的是
SwiftyJSON
,您也可以这样做:
JSON(response.data!)
Swift 5:同样的格式工作,但您也可以对String使用较短的编码形式(数据:data,编码:.utf8)如何在完整响应中获取特定值的数据?打印全身响应时,您必须查看原始数据。