我正在尝试使用HTTPURLResponse
函数访问自定义服务器响应正文中的类URLResponse
(URLSession.shared.dataTask
)中的500个错误。我只能访问statusCode
和allHeaderFields
,但似乎无济于事。
等效于java中的ex。是HttpURLConnection.getErrorStream()
,但我不能很快找到类似的东西(我想在不使用第3方库的情况下解决此问题)。
如何获得500错误的文本回复?
答案 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等)中获取有关错误的大量信息。
如果您有权访问服务器日志并且看不到足够的信息,则可以提高服务器和应用程序的日志记录级别。