如何处理 500 http 错误



我正在尝试使用URLSession.shared.dataTask函数访问自定义服务器响应正文以查找类HTTPURLResponse(URLResponse( 中的 500 个错误。我只能访问statusCodeallHeaderFields但这似乎没有帮助。

例如,java 中的等效项是HttpURLConnection.getErrorStream(),但我在纯 swift 中找不到类似的东西(我想在不使用 3rd 方库的情况下解决这个问题(。

如何获取 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?)传递给完成处理程序。完成处理程序的数据参数是服务器返回的数据。

例如:

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等(。

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

相关内容

  • 没有找到相关文章

最新更新