使用WKWebView,連接到用戶選擇時將重定向到另一個站點的站點。 didReceiveServerRedirectForProvisionNavigation
後出現以下錯誤:kCFErrorDomainCFNetwork代碼= 310「(null)」
Error Domain=kCFErrorDomainCFNetwork Code=310 "(null)" UserInfo={_WKRecoveryAttempterErrorKey=<WKReloadFrameErrorRecoveryAttempter: 0x60800002a8e0>, _kCFStreamErrorCodeKey=-2096, _kCFStreamErrorDomainKey=4}
這裏沒有什麼特別的事情發生。我只是想模仿Safari瀏覽器。
我也覆蓋didReceive challenge
下列要求:
func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
var cred: URLCredential?
if let trust = challenge.protectionSpace.serverTrust {
cred = URLCredential(trust: trust)
} else {
//creds are hardcoded just to try to get the thing working.
cred = URLCredential(user: "hardcodedusername", password: "hardcodedpassword", persistence: .permanent)
}
completionHandler(.useCredential, cred)
}
值得一提的是,重定向時didReceive challenge
不叫。
我的假設是,我試圖重定向到的網站有一箇舊的加密協議(TLS 1.0),iOS不允許重定向。該網站在iPhone上的Safari上正常運行。我也有ATS任意負載設置。這是Objective-C到Swift的轉換,Objective-C版本沒有這個問題(使用UIWebView,這是我在嘗試WKWebView之前的原始實現...同樣的錯誤)。
要清楚,這是一個質量保證環境。我不在乎證書是好還是壞。如果我可以避免這種環境的任何安全需求,那將是很棒的,但似乎任意加載設置對我來說都沒有任何幫助。
我錯過了什麼?
任意加載會讓你http,沒有損壞或舊的HTTPS。看看這個答案中的代碼,看看你是否可以通過NSURLConnection訪問該站點:https://stackoverflow.com/questions/14268230/has-anybody-found-a-way-to-load-https-pages-with -an-invalid-server-certificate-u –
感謝您的評論,但它似乎並不奏效。我試過使用NSURLConnection和URLSession(與適當的代表)。事情是...挑戰方法從未被擊中。最後我會遇到同樣的錯誤。 –
嘗試使用openssl進行連接,例如'openssl s_client -connect host:443' - 如果連接,您可以鍵入HTTP請求,如「GET/HTTP/1.0」 - 否則應該給出錯誤。您也可以嘗試控制openssl使用的版本(請參見手冊頁) –