我遇到的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得到了答案:
迅捷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。