Michael

写写代码,说说人生

您好,我是Michael,欢迎来到我的个人家园。
代码搬运工,目前就职于XX证券,努力修行中。


H5 / Java / Objc / Swift / Vue / RN

Android中WebView无法打开HTTPS链接

Android使用WebView加载https地址打不开的问题

在做项目的时候遇到了 webview 怎么也访问不来https的接口,找了半天原因,上网查了帖子才知道,现在把原因分析写出来,和解决办法,让大家以后尽量避免这样的问题。 在 Android 中,WebView是用来 load httphttps 网页到本地应用的控件。 在默认情况下,通过loadUrl(String url)方法,可以顺利load诸如,http://www.baidu.com 之类的页面。但是,当load有ssl层的https页面时,如 https://money.183.com.cn/, 如果这个网站的安全证书在 Android 无法得到认证,WebView 就会变成一个空白页,而并不会像PC浏览器中那样跳出一个风险提示框。因此,我们必须针对这种情况进行处理。

解决办法

WebView webview = (WebView) findViewById(R.id.webview);
webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        // handler.cancel();// Android默认的处理方式,WebView变成空白页
        handler.proceed();  // 接受所有网站的证书
        // handleMessage(Message msg); // 进行其他处理
    }
});

注意:在重写 WebViewClientonReceivedSslError 方法时,一定要去除onReceivedSslError 方法的 super.onReceivedSslError(view, handler, error);,否则设置无效。

代码中已经添加了这个方法,但是还是加载不成功,求高人解惑…

后台提示:

EventHub.removeMessages(int what = 107) is not supported before the WebViewCore is set up.

前台提示:

ssl server requires client certificate

解决方案

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); 
}
最近的文章

Charles使用教程

简介Charles是常用的截取网络封包的工具(俗称抓包)。Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。 Charles 是收费软件,可以免费试用30 天。试用期过后,未付费的用户仍然可以继续使用,但是每次使用时间不能超过30 分钟,并且启动时将会有10 秒钟的延时。安装首先从Charles官网下载安装包进行安装。使用介绍Charles 主要提供两种查看封包的视图,分别名为 “Structure” 和 “Se...…

数据抓包工具继续阅读
更早的文章

升级Mac系统自带的git

Mac系统自带GIT,但是自带的GIT版本很老,也没有自动提示和gitk等功能,如果一个一个去安装非常的费劲。我们采用brew安装git非常的方便,但是,我们发现安装后没有任何作用,因为默认使用的GIT还是老版本的。为了解决大家和我一样的问题,我现在写下我的解决办法,希望能够帮助到大家。 先安装brew,然后安装git,brew install git 备份旧的GIT目录,cd /usr/local/bin ls git* mkdir backup-gi...…

项目管理-SVN与GIT继续阅读