【问题标题】:Any way to get the response body during HTTP errors?有什么方法可以在 HTTP 错误期间获取响应正文?
【发布时间】:2016-05-07 09:46:57
【问题描述】:

我遇到了一个偶尔会抛出 HTTP 403 错误的 API,并且响应正文可以以 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 错误的情况下,它似乎并没有返回响应正文。是否有解决方法或我在这里缺少的东西?

【问题讨论】:

    标签: ios swift httpresponse alamofire http-status-code-403


    【解决方案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。

    【讨论】:

    • 现在(XC8.1,Swift 3)编码是:String(data: data, encoding: String.Encoding.utf8)
    • 如果你使用SwiftyJSON,你也可以这样做:JSON(response.data!)
    • Swift 5:同样的格式可以工作,但你也可以使用更短的编码形式 String(data: data, encoding: .utf8)
    【解决方案2】:

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

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

    【讨论】:

    • 如何在完整响应中获取特定值的数据?
    • 这会打印所有正文响应,您必须查看原始数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 2019-11-01
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    相关资源
    最近更新 更多