首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有办法在HTTP错误期间获得响应体?

有没有办法在HTTP错误期间获得响应体?
EN

Stack Overflow用户
提问于 2016-01-29 23:34:55
回答 2查看 29.8K关注 0票数 52

我遇到了一个API,它偶尔会抛出HTTP 403错误,响应主体可以以json的形式提供一些额外的信息,但是对于我来说,我似乎无法从Alamofire响应对象中获得这些信息。如果我通过chrome点击API,我会在开发者工具中看到信息。下面是我的代码:

代码语言:javascript
复制
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错误时,它似乎没有返回响应正文。有没有什么变通的方法或者我遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-11 03:59:38

我在他们的github页面上问了这个问题,并从cnoon得到了回答:

swift 2:

代码语言:javascript
复制
if let data = response.data {
    let json = String(data: data, encoding: NSUTF8StringEncoding)
    print("Failure Response: \(json)")
}

swift 3:

代码语言:javascript
复制
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。

票数 103
EN

Stack Overflow用户

发布于 2020-04-10 00:54:39

Swift 5在DefaultDataResponse扩展中轻松获得身体响应:

代码语言:javascript
复制
String(data: data!, encoding: String.Encoding.utf8)
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35088237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档