尝试在WebView中加载URL时出错-Android

时间:2019-07-14 12:11:08

标签: ssl android-webview

由于SSL错误,我试图在我的一项活动中加载到Web视图中的URL显示为空。

我曾尝试使用网络安全配置XML文件夹,但不确定我是否了解我在做什么。任何帮助将不胜感激。

在调试时,当我将Google.com作为URL加载到Webview中时,页面加载正常。然后,当我尝试搜索特定站点时,它在那里,但是当我单击它时,Android Studio的运行日志中出现了SSL错误。

public class About_ALC extends AppCompatActivity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_about__alc);
    final WebView webview = (WebView) findViewById(R.id.web_about_alc);
    webview.getSettings().setJavaScriptEnabled(true);
    webview.getSettings().setLoadWithOverviewMode(true);
    webview.getSettings().setUseWideViewPort(true);
    webview.setWebViewClient(new WebViewClient());
    webview.setWebChromeClient(new WebChromeClient());
    webview.loadUrl("https://andela.com/alc/");
}
  

我在Android Studio中收到的错误消息是:

     

“ E /铬:[ERROR:ssl_client_socket_impl.cc(947)]握手失败;返回-1,SSL错误代码1,net_error -202”

3 个答案:

答案 0 :(得分:0)

您需要扩展WebViewClient以允许尽管出现以下ssl错误也可以加载。

    // A new webclient that ignore ssl errors
    private class IgnoreSSLErrorWebViewClient extends WebViewClient {
        // You can all the class anything

    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
    handler.proceed(); // When an error occurs, ignore and go on
    }
}

该网站存在ssl证书验证问题。出现ssl验证错误时,默认的WebViewClient停止加载。此扩展程序将指示它忽略该错误并继续。

因此更改行webview.setWebViewClient(new WebViewClient());

webview.setWebViewClient(new IgnoreSSLErrortWebViewClient());

现在应该可以正常使用了。

答案 1 :(得分:0)

如果您使用此代码,则Play商店可能会拒绝您的版本

@Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
    handler.proceed(); // When an error occurs, ignore and go on
    }

答案 2 :(得分:0)

我分享我的方式,没有扩展

webView = findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient(){
   @Override
   public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
      //super.onReceivedSslError(view, handler, error);
      handler.proceed();//skip ssl error
   }
});

webView.loadUrl(URL);

编辑:

Play 商店可能会将其视为漏洞错误,如果有人需要,一些解决方案是,向用户显示错误对话框。这是不自动接受错误,责任是用户,就像那样

final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(msg);
builder.setPositiveButton("continue", (dialog, which) -> handler.proceed());
builder.setNegativeButton("cancel", (dialog, which) -> handler.cancel());
final AlertDialog dialog = builder.create();
dialog.show();