У меня есть самоподписанный сертификат в виртуальной машине, которую я использую для проверки моего сервиса. Используя ответы, найденные в UIWebView to view self signed websites (No private api, not NSURLConnection) - is it possible?, я смог написать действующий код SWIFT 2.0. Xcode 7 говорит мне, что NSURLConnection
устарел, и вместо этого я должен использовать NSURLSession
. Ни одна из моих попыток переноса этого кода не удалась, и ни один из обычных сценариев конверсии, описанных в других ответах, не применяется.Является ли это специализированное использование NSURLConnection для обработки самоподписанных сертификатов, конвертируемых в NSURLSession?
Если я создаю новый NSURLSession
, чтобы обработать вызов аутентификации с помощью моих методов делегирования, другие нагрузки все еще происходят на и, следовательно, сбой.
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!)
}