如何处理500个HTTP错误

时间:2018-10-19 13:59:21

标签: swift httpresponse nsurlsession foundation nshttpurlresponse

我正在尝试使用HTTPURLResponse函数访问自定义服务器响应正文中的类URLResponseURLSession.shared.dataTask)中的500个错误。我只能访问statusCodeallHeaderFields,但似乎无济于事。

等效于java中的ex。是HttpURLConnection.getErrorStream(),但我不能很快找到类似的东西(我想在不使用第3方库的情况下解决此问题)。

如何获得500错误的文本回复?

3 个答案:

答案 0 :(得分:2)

您无法从HTTPURLResponse中获取响应数据。它仅包含标题信息。

如果要检索响应数据,则需要使用诸如dataTask(with:completionHandler:)之类的内容来发送请求。该函数将(Data?, URLResponse?, Error?)传递给完成处理程序。完成处理程序的data参数是服务器返回的数据。

例如:

import Foundation

let url = URL(string: "http://httpstat.us/500")!

let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
    guard let data = data, let response = response as? HTTPURLResponse else {
        return
    }

    switch response.statusCode {
    case 500...599:
        print(String(data: data, encoding: .utf8) ?? "No UTF-8 response data")
    default:
        print("not a 500")
    }
}

task.resume()

编辑:根据@Rob的建议,取消了力量解开动作

答案 1 :(得分:2)

let task = session.dataTask(with: urlRequest) { data, response, error in
    if let data = data, let response = response as? HTTPURLResponse {
        switch response.statusCode {
        case 500...599:
            let yourErrorResponseString = String(data: data, encoding: .utf8)
        default:
            break
        }
    }
}

答案 2 :(得分:0)

无法从客户端获取有关500错误的更多详细信息。

500是“内部服务器错误”,它故意含糊不清,无济于事,因为披露有关错误原因的信息会帮助黑客破坏网站。

但是,您可以从服务器日志以及有关在服务器端处理代码的任何日志(php等)中获取有关错误的大量信息。

如果您有权访问服务器日志并且看不到足够的信息,则可以提高服务器和应用程序的日志记录级别。