当前位置: 首页 > 知识库问答 >
问题:

android WebView无法加载受Cloudflare保护的网页

云炜
2023-03-14

我正在开发一个android应用程序。我的应用程序中有一个webview,它将加载一个网页。

    webView = findViewById(R.id.web_view);
    webView.getSettings().setUserAgentString("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 SECSSOBrowserChrome");
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl("xxxx.html");

我用https://www.google.com,网络视图工作正常。但它无法加载xxx。html(此网站受Cloudflare保护)

我像这样添加了WebViewClient

webView.setWebViewClient(new WebViewClient() {
                @Override
                public void onPageStarted(WebView view, String url, Bitmap favicon) {
                    super.onPageStarted(view, url, favicon);
                    KLog.d(TAG, "onPageStarted " + url);
                }

                @Override
                public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                    KLog.d(TAG, "host =" + request.getUrl().toString());
                    view.loadUrl(request.getUrl().toString());
                    return true;
                }

                @Override
                public void onPageFinished(WebView view, String url) {
                    KLog.d(TAG, "onPageFinished " + url);
                }

                @Override
                public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
                    super.onReceivedError(view, request, error);
                    KLog.d(TAG,"onReceivedError " + error.getDescription() + "Error code = " + error.getErrorCode());
                }
            });

但是public void onPageStarted(WebView视图、字符串url、位图favicon){从不调用。

等了很久,我得到这个图像

https://drive.google.com/file/d/12DmOGWNqKcq5IsMiQEApmtnvequOIxqD/view?usp=drivesdk

你能帮我用android WebView加载这个页面吗?

提前谢谢

共有2个答案

宗政权
2023-03-14

这是因为您试图访问的服务器不安全,即它使用的是HTTP(不是HTTPS)。

Android P默认使用HTTPS。这意味着,如果您在应用程序中使用未加密的HTTP请求,该应用程序将在除Android P之外的所有版本的Android中正常工作。

要避免这种安全性,请尝试对应用程序代码进行以下更改。

AndroidManifest。xml

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:networkSecurityConfig="@xml/network_security_config"
                    ... >
        ...
    </application>
</manifest>

在res/xml中添加名为:network\u security\u config的文件。xml

网络安全配置中。xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        //  Add host of your URL in below line. 
        //   ie. if url is  "https://www.google.com/search?source=...."
        //   then just add "www.google.com"
        <domain includeSubdomains="true">www.myanmartvchannel.com</domain>
    </domain-config>
</network-security-config>
和和裕
2023-03-14

在网络安全配置中

从Android 9(API级别28)开始,默认情况下禁用明文支持。

要在应用程序中启用基于HTTP的URL(不推荐),请在应用程序标记中的Androidanifest.xml文件中添加以下代码

android:usesCleartextTraffic="true"
 类似资料:
  • 为了防止我们的网络在预连接攻击和获取访问部分中解释的先前攻击破解方法,我们需要访问路由器的设置页面。每个路由器都有一个web页面,我们可以在页面中修改路由器的设置,它通常位于路由器的IP上。首先,获得我们自己的计算机的IP,为此运行命令。如下面的屏幕截图所示,突出显示的部分是计算机的IP: 现在打开浏览器并访问:。对于此示例,计算机的IP为。通常,路由器的IP是子网的第一个IP。目前,它是,我们只

  • 问题内容: 关键字授予对相同包和子类(http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html)中的类的访问权限。 现在,每个类都有一个超类(http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html)。 因此,我得出结论,即使每个类都可以访问的方法。

  • 问题内容: 如何在受保护的python类中定义一个方法,只有子类才能看到它? 这是我的代码: 我只希望看到的方法的子类。 问题答案: Python不像C ++ / Java / C#支持访问保护。一切都是公开的。座右铭是:“我们都是成年人。” 记录下您的课程,并坚持要求您的合作者阅读并遵守文档。 Python的文化是,以下划线开头的名称意味着:“除非您真正知道应该使用这些名称,否则请不要使用它们。

  • 从quarkus集装箱码头,我可以使用以下命令访问keycloak服务器 返回200状态;但无法访问受保护的资源。 我在这里做错了什么?

  • 6xx受保护 600 Series,Repliesregardingconfidentialityandintegrity 631 Integrityprotectedreply. 632 Confidentialityandintegrityprotectedreply. 633 Confidentialityprotectedreply.

  • 问题内容: 我有两节课。 类具有受保护的方法,是的实例。 Class 与class在同一包中。 我正在尝试访问,但正在获取… 怎么了? 问题答案: 编译器应该捕获这样的错误。当您显然在运行时得到此消息时,发生了一些奇怪的事情。可能您已更改了源代码,但已完全重新编译。 另一个潜在但晦涩的问题是通过不同的类加载器加载类。即使包名称相同,从不同的类加载器加载的类也将位于不同的包中(以与由不同的类加载器加