[英]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.