簡體   English   中英

如何處理500個HTTP錯誤

[英]How to handle 500 http errors

我正在嘗試使用URLSession.shared.dataTask函數在類HTTPURLResponseURLResponse )中訪問500個錯誤的自定義服務器響應正文。 我只能訪問statusCodeallHeaderFields但似乎無濟於事。

等價於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM