我正在尝试使用URLSession.shared.dataTask
函数访问自定义服务器响应正文以查找类HTTPURLResponse
(URLResponse
( 中的 500 个错误。我只能访问statusCode
和allHeaderFields
但这似乎没有帮助。
例如,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等(。
如果您有权访问服务器日志,但看不到足够的信息,则可以提高服务器和应用程序的日志记录级别。