无法在UIWebView中加载https

时间:2017-05-19 10:52:31

标签: ios swift uiwebview nsurlconnection

我在使用UIWebView请求加载https时遇到问题。 我已经阅读了一些相关的答案,但他们更加困惑我。 这是我的代码: 我在下面使用的链接将重定向到另一个页面。

class PartnersWebViewControlerViewController: UIViewController, NSURLConnectionDelegate, UIWebViewDelegate {

    @IBOutlet weak var admitadWebView: UIWebView!

    let url = "https://ad.admitad.com/g/54tjzvqfv92260a476c4ffa09d8e84/subid/26/"

    override func viewDidLoad() {
        super.viewDidLoad()
        admitadWebView.delegate = self
        let requestURL = URL(string:url)
        let request = URLRequest(url: requestURL!)
        admitadWebView.loadRequest(request)

    }
}

但是当我将https更改为http时,一切正常 在这个答案的帮助下 UIWebView to view self signed websites (No private api, not NSURLConnection) - is it possible?

我尝试以下列方式符合这些协议NSURLConnectionDelegateUIWebViewDelegate

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {

    let urlConnection: NSURLConnection = NSURLConnection(request: request as URLRequest, delegate: self)!
        urlConnection.start()
    return true
}

func connection(_ connection: NSURLConnection, canAuthenticateAgainstProtectionSpace protectionSpace: URLProtectionSpace) -> Bool {
    return true
}

func connection(_ connection: NSURLConnection, didReceive challenge: URLAuthenticationChallenge) {
    let host = "www.ad.admitad.com"

    if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust &&
        challenge.protectionSpace.host == host {
        let credential = URLCredential(trust: challenge.protectionSpace.serverTrust!)
        challenge.sender!.use(credential, for: challenge)
    } else {
        challenge.sender!.performDefaultHandling!(for: challenge)
    }
}

但是,我仍然有白屏,没有任何打印记录。

任何帮助都表示赞赏。这是我第一次遇到这样的问题,很抱歉,如果我的问题看起来很虚伪。

我正在使用ios 10.3 UPD:仅在设备(iphone 6)上启动时才会出现此问题

2 个答案:

答案 0 :(得分:0)

据我所知,Apple仅允许您出于安全原因使用HTTPS。要访问HTTP网站,您必须更改Info.plist(在支持文件文件夹内)。在那里,您必须添加一个新密钥:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>yourwebsite.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
            <key>otherdomain.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
        </dict>
    </dict>

将“yourwebsite.com”替换为您要访问的网站的域名。这告诉xcode您要访问该网站,并且您知道它是不安全的HTTP。如果您还要访问其他域,则可以在.plist中向字典添加更多键,如上所示“otherdomain”。

答案 1 :(得分:0)

请参阅错误日志

&#34; App Transport Security阻止了明文HTTP(http://)资源加载,因为它不安全。可以通过应用程序的Info.plist文件配置临时例外。 &#34;

在info.plist中添加此内容

enter image description here

请在此处查看截图 enter image description here