Android WebView加载HTTP而非HTTPS网页问题求助
Android WebView加载HTTP网站的问题解决
要在Android WebView里正常加载HTTP网站,需要解决Android系统对明文流量的限制,同时配置好WebView的相关参数,具体步骤如下:
1. 添加网络安全配置
Android 9(API 28)及以上版本默认阻止明文HTTP流量,需要创建网络安全配置文件来允许明文访问:
在res/xml目录下新建network_security_config.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config>
如果只想允许特定域名的HTTP访问,可以改成:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">weburl.com</domain> </domain-config> </network-security-config>
接着在AndroidManifest.xml的application标签中引用这个配置:
<application ... android:networkSecurityConfig="@xml/network_security_config"> ... </application>
2. 完善WebView配置
你的现有代码已做部分配置,这里补充优化后的完整代码:
package com.example.chatgpt; import android.os.Bundle; import android.webkit.SslErrorHandler; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.net.http.SslError; import android.os.Build; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = findViewById(R.id.webView); WebSettings webSettings = webView.getSettings(); // 禁用缓存,确保加载最新内容 webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); // 设置自定义User-Agent String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"; webSettings.setUserAgentString(userAgent); // 启用JavaScript(根据网页需求调整) webSettings.setJavaScriptEnabled(true); // Android 5.0+允许混合内容加载(适配网页中HTTPS资源混编的情况) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); } // 处理SSL错误(仅当网站跳转HTTPS出现证书问题时使用,谨慎开启) webView.setWebViewClient(new WebViewClient() { @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); } }); // 加载目标HTTP网站 webView.loadUrl("http://weburl.com/"); } // 处理WebView返回导航逻辑 @Override public void onBackPressed() { if (webView.canGoBack()) { webView.goBack(); } else { super.onBackPressed(); } } }
3. 检查权限配置
确保AndroidManifest.xml中添加了网络访问权限:
<uses-permission android:name="android.permission.INTERNET" />
注意:handler.proceed()会忽略所有SSL错误,存在安全风险,如果网站有合法的SSL证书,建议移除该逻辑,让用户确认或修复证书问题。
内容的提问来源于stack exchange,提问作者HelloCH
相关产品推荐
相关产品推荐

