如何处理 500 个 http 错误
How to handle 500 http errors
我正在尝试使用 URLSession.shared.dataTask
函数访问 class HTTPURLResponse
(URLResponse
) 中的 500 个错误的自定义服务器响应正文。我只能访问 statusCode
和 allHeaderFields
但它似乎没有帮助。
java 中的等价物。是 HttpURLConnection.getErrorStream()
,但我在纯 swift 中找不到类似的东西(我想在不使用第 3 方库的情况下解决这个问题)。
如何获取 500 错误的文本响应?
您无法从 HTTPURLResponse
中获取响应数据。它只包含 header 信息。
如果您想检索响应数据,您需要使用类似 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 的建议删除了强制展开
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
}
}
}
无法从客户端获取有关 500 错误的更多详细信息。
500 是 "Internal Server Error",它故意含糊不清且无用,因为披露有关错误原因的信息会帮助黑客破坏网站。
但是,您可以从服务器日志和服务器端处理代码的日志(php 等)中获取有关错误的大量信息。
如果您有权访问服务器日志但没有看到足够的信息,您可以提高服务器和应用程序的日志记录级别。
我正在尝试使用 URLSession.shared.dataTask
函数访问 class HTTPURLResponse
(URLResponse
) 中的 500 个错误的自定义服务器响应正文。我只能访问 statusCode
和 allHeaderFields
但它似乎没有帮助。
java 中的等价物。是 HttpURLConnection.getErrorStream()
,但我在纯 swift 中找不到类似的东西(我想在不使用第 3 方库的情况下解决这个问题)。
如何获取 500 错误的文本响应?
您无法从 HTTPURLResponse
中获取响应数据。它只包含 header 信息。
如果您想检索响应数据,您需要使用类似 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 的建议删除了强制展开
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
}
}
}
无法从客户端获取有关 500 错误的更多详细信息。
500 是 "Internal Server Error",它故意含糊不清且无用,因为披露有关错误原因的信息会帮助黑客破坏网站。
但是,您可以从服务器日志和服务器端处理代码的日志(php 等)中获取有关错误的大量信息。
如果您有权访问服务器日志但没有看到足够的信息,您可以提高服务器和应用程序的日志记录级别。