我的應用程式應訪問托管網站上的 php 檔案,以便從后端 SQL 資料庫獲取資料。這作業正常,但我想做好準備或所有可能的錯誤。如果沒有互聯網連接或無法訪問主機,則會引發錯誤 - 很好。但是如果將 url 地址修改為主機上不存在的地址,則不會拋出錯誤。但我也想涵蓋這種情況。Swift 中最好的方法是什么?
這是我的代碼:
@available(iOS 15.0, *)
func checkCustomerExistsInBackend(emailAddress: String) async throws -> String
{
let url = URL(string: "https://myHost.de/mySite/checkCustomerexists.php")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
let dataString = "EmailAddress=\(emailAddress)"
var returnValue = ""
do {
let dataD = dataString.data(using: .utf8)
let (data, _) = try await URLSession.shared.upload(for: request, from: dataD!, delegate: nil)
let answer = try JSONDecoder().decode(BackendMessage.self, from: data)
returnValue = answer.Message
}
catch {
let myError: NSError = error as NSError
switch myError.localizedDescription {
case "The Internet connection appears to be offline.":
throw BackendError.noInternet
case "A server with the specified hostname could not be found.":
throw BackendError.serverNotFound
default:
throw error
}
}
return returnValue
}
上面帶有“https://myHost.de/mySite/checkCustomerexists.php”的網址當然不是真實地址。但是,當我用真實的主機地址替換“myHost.de”時,即使站點“mySite”不存在,也不會引發錯誤。
我花了幾個小時在 SO 中尋找答案,但找不到任何適合我的星座的東西。
任何提示將不勝感激!
uj5u.com熱心網友回復:
Larme 的評論回答了這個問題。如果它對任何跨過同一主題的人有幫助,這里是我的示例的修改代碼以及基于 Larme 建議的解決方案:
@available(iOS 15.0, *)
func checkCustomerExistsInBackend(emailAddress: String) async throws -> String {
let url = URL(string: "https://myHost.de/mySite/checkCustomerexists.php")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
let dataString = "EmailAddress=\(emailAddress)"
var returnValue = ""
do {
let dataD = dataString.data(using: .utf8)
let (data, response) = try await URLSession.shared.upload(for: request, from: dataD!, delegate: nil)
let httpURLResponse = response as? HTTPURLResponse
let statusCode = httpURLResponse?.statusCode
if statusCode != 404 {
let answer = try JSONDecoder().decode(BackendMessage.self, from: data)
returnValue = answer.Message
}
else {
throw BackendError.invalidURL
}
}
catch {
let myError: NSError = error as NSError
print(myError.localizedDescription)
switch myError.localizedDescription {
case "The Internet connection appears to be offline.":
throw BackendError.noInternet
case "A server with the specified hostname could not be found.":
throw BackendError.serverNotFound
default:
throw error
}
}
return returnValue
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/425893.html
上一篇:PythonTkinter使用iconbitmap不需要檔案路徑(如圖片url)
下一篇:無法在Python中卷曲POST
