繁体   English   中英

如何处理500个HTTP错误

[英]How to handle 500 http errors

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

等价于java中的ex。 HttpURLConnection.getErrorStream() ,但我无法在纯Swift中找到类似的内容(我想在不使用第三方库的情况下解决此问题)。

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

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
        }
    }
}

无法从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的建议,取消了力解开

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM