[英]How to handle 500 http errors
我正在尝试使用URLSession.shared.dataTask
函数在类HTTPURLResponse
( URLResponse
)中访问500个错误的自定义服务器响应正文。 我只能访问statusCode
和allHeaderFields
但似乎无济于事。
等价于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.