UIWebview.loadURL()但URL是自签名证书。 Swift iOS

时间:2016-04-06 03:54:58

标签: ios swift uiwebview certificate

我有一个网址https://203.xxx.xxx.xxx。此网址仅用于 仅供测试

我想在Swift2.0的UIWebview中加载此URL。可惜 !证书已过期。

我在Android中也做了同样的事情,但在Swift中遇到了问题。

请指导.....

到目前为止我做了什么!!

01. Defined AppTransportSecurity in info.plist

    <key>NSAppTransportSecurity</key>
            <dict>
                <key>NSAllowsArbitraryLoads</key>
                <true/>
            </dict>
  1. 尝试使用连接(canAuthenticateAgainstProtectionSpace)&amp;连接(willSendRequestForAuthenticationChallenge)
  2. 但没有成功。

    当我在Safari中加载相同的网址时会发生什么?

    错误说:Safari cannot verify the IDENTITY

    绕过这个需要帮助。

    还尝试了一些链接 :(这可能是解决方案)

    @implementation NSURLRequest (NSURLRequestWithIgnoreSSL) 
    
    + (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
    {
        return YES;
    }
    
    @end
    

    但是如何在Swift 2.0中实现这个呢? 如果我错了,请在Swift中正确引导。

1 个答案:

答案 0 :(得分:8)

终于得到了答案:

步骤1&gt;&gt; import SafariServices

步骤2&gt;&gt;将NSURLConnectionDelegate与ViewController一起使用,即

class ViewController:UIViewController, NSURLConnectionDelegate

步骤3&gt;&gt;覆盖方法:

func connection(connection: NSURLConnection, canAuthenticateAgainstProtectionSpace protectionSpace: NSURLProtectionSpace?) -> Bool

func connection(connection: NSURLConnection, willSendRequestForAuthenticationChallenge challenge: NSURLAuthenticationChallenge)

步骤4&gt;&gt; GOTO viewDidLoad在Webview中加载URL的位置,&amp;进行更改:

let url = NSURL (string: URL)//where URL = https://203.xxx.xxx.xxx
let requestObj = NSURLRequest(URL: url!)
var request: NSURLRequest = NSURLRequest(URL: url!)
var connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: false)!
connection.start()
YOUR_WEBVIEW.loadRequest(requestObj);

步骤5&gt;&gt; GOTO webView with shouldStartLoadWithRequest&amp;返回true。如果你返回false,你永远不会得到结果。

func webView(IciciWebView: UIWebView!, shouldStartLoadWithRequest request: NSURLRequest!, navigationType: UIWebViewNavigationType) -> Bool
{
//Do whatever you want to do.

 return true
}

步骤6&gt;&gt;更新功能:

func connection(connection: NSURLConnection, canAuthenticateAgainstProtectionSpace protectionSpace: NSURLProtectionSpace?) -> Bool
    {
        print("In canAuthenticateAgainstProtectionSpace");

        return true;
    } 

步骤7&gt;&gt;更新功能:

func connection(connection: NSURLConnection, willSendRequestForAuthenticationChallenge challenge: NSURLAuthenticationChallenge) 
    {
        print("In willSendRequestForAuthenticationChallenge..");
        challenge.sender!.useCredential(NSURLCredential(forTrust: challenge.protectionSpace.serverTrust!), forAuthenticationChallenge: challenge)
        challenge.sender!.continueWithoutCredentialForAuthenticationChallenge(challenge)

    }

参考资料:Swift的开发人员参考,Stackoverflow的很多页面,&amp;谷歌的一些论坛。

这些步骤解决了我的问题&amp;现在我可以在Web视图中加载自签名URL。