kCFErrorDomainCFNetwork Code=310 "(null)"

Mit einem WKWebView, eine Verbindung zu einer Website, die, nach Auswahl des Benutzers, wird eine Umleitung zu einem anderen Ort. Die folgende Fehlermeldung kommt nach didReceiveServerRedirectForProvisionNavigation:

Error Domain=kCFErrorDomainCFNetwork Code=310 "(null)" UserInfo={_WKRecoveryAttempterErrorKey=<WKReloadFrameErrorRecoveryAttempter: 0x60800002a8e0>, _kCFStreamErrorCodeKey=-2096, _kCFStreamErrorDomainKey=4}

Es ist nichts wirklich besonderes, was hier passiert. Ich bin einfach nur zu imitieren Safari.

Habe ich auch überschrieben didReceive challenge mit den folgenden:

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)
}

Es ist erwähnenswert, dass didReceive challenge ist nicht aufgerufen, wenn umgeleitet wird.

Meine Vermutung ist, dass die Website, die ich versuche, für die Umleitung an eine alte Verschlüsselungsprotokoll (TLS 1.0) und iOS ist nicht so dass die Weiterleitung. Die Website funktioniert in Safari auf dem iPhone. Ich habe auch ATS beliebige Lasten festgelegt. Dies ist Objective-C zu Swift-Konvertierung, und die Objective-C version hat kein problem mit dieser (mit UIWebView, das war mein original-Implementierung, bevor Sie versuchen, WKWebView... gleiche Fehlermeldung).

Klar zu sein, das ist eine QA-Umgebung. Ich don ' T Pflege wenn das cert ist gut oder schlecht. Wenn ich kann vermeiden, dass jede Sicherheitsanforderung für diese Umgebung, das wäre toll, aber es scheint, wie die beliebige Einstellung laden tut nichts für mich.

Was bin ich?

  • Beliebigen laden bekommen Sie http, keine defekte oder alte https. Betrachten Sie den code in der Antwort und sehen, wenn Sie auf die Website mit NSURLConnection: stackoverflow.com/questions/14268230/...
  • Danke für den Kommentar, aber es scheint nicht zu funktionieren. Ich habe versucht, mit beiden NSURLConnection und URLSession (mit der richtigen Delegaten). Der Sache ist... die Herausforderung, Methoden nie getroffen. Ich am Ende mit dem gleichen Fehler am Ende.
  • Versuchen, eine Verbindung mit openssl, wie openssl s_client -connect host:443 - wenn es eine Verbindung herstellt, können Sie geben Sie eine HTTP-Anforderung, wie GET / HTTP/1.0 -- wenn nicht, sollte es geben, ein Fehler. Sie können auch versuchen, um zu Steuern, welche tls-version von openssl verwendet (siehe manual-Seite)
  • Dies könnte im Zusammenhang mit einer ungültigen/Zertifikats. Ich erhielt die gleiche Fehlermeldung (310), wenn Sie eine upload-Anforderung durch den simulator laufen, während charles proxy.
  • Also, was ist die Lösung?
  • Ich fügte hinzu, eine Antwort. das ist die beste Lösung, die wir im moment haben.

Schreibe einen Kommentar