一尘不染

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

swift

我遇到的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错误的情况下,它似乎并没有给我响应体。是否有解决方法或我在这里缺少的东西?


阅读 212

收藏
2020-07-07

共1个答案

一尘不染

我在他们的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。

2020-07-07