Ho un certificato autofirmato nella VM che uso per testare il mio servizio. Usando le risposte trovate in UIWebView to view self signed websites (No private api, not NSURLConnection) - is it possible? ho potuto scrivere codice swift 2.0 funzionante. Xcode 7 mi dice che NSURLConnection
è deprecato e dovrei usare invece NSURLSession
. Nessuno dei miei tentativi di migrare questo codice è riuscito, e nessuno dei soliti scenari di conversione descritti in altre risposte sembra applicarsi.È questo uso specializzato di NSURLConnection per gestire certificati autofirmati convertibili in NSURLSession?
Se creo un nuovo NSURLSession
per gestire la verifica dell'autenticazione con i miei metodi delegati, gli altri carichi si verificano ancora su sharedSession
e pertanto non riescono.
var authRequest : NSURLRequest? = nil
var authenticated = false
var trustedDomains = [:] // set up as necessary
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
if !authenticated {
authRequest = request
let urlConnection: NSURLConnection = NSURLConnection(request: request, delegate: self)!
urlConnection.start()
return false
}
else if isWebContent(request.URL!) { // write your method for this
return true
}
return processData(request) // write your method for this
}
func connection(connection: NSURLConnection, willSendRequestForAuthenticationChallenge challenge: NSURLAuthenticationChallenge) {
if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust {
let challengeHost = challenge.protectionSpace.host
if let _ = trustedDomains[challengeHost] {
challenge.sender!.useCredential(NSURLCredential(forTrust: challenge.protectionSpace.serverTrust!), forAuthenticationChallenge: challenge)
}
}
challenge.sender!.continueWithoutCredentialForAuthenticationChallenge(challenge)
}
func connection(connection: NSURLConnection, didReceiveResponse response: NSURLResponse) {
authenticated = true
connection.cancel()
webview!.loadRequest(authRequest!)
}