不允许向192.168.1.2发送明文HTTP流量,Android Studio报错如何解决?
我想要向WampServer发送请求,但Android Studio停止执行并提示“不允许向192.168.1.2发送明文HTTP流量”的错误。我刚将Android Studio更新至最新版本(P),之前该操作可正常运行无异常,请问问题出在哪里?该如何解决?
用户提供的代码片段:
String login_url = "http://192.168.1.2/login.php"; URL url = new URL(login_url"); // 注意:这里存在语法错误,多了一个闭合双引号 HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection(); httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoOutput(true); httpURLConnection.setDoInput(true); OutputStream outputStream = httpURLConnection.getOutputStream(); ....
嘿,这个问题我太熟了——你升级到Android P(API 28)后遇到的是Google在高版本系统里新增的明文流量强制限制,这是为了提升APP整体安全性做的改动,之前的Android版本没有这个强制约束,所以你的代码之前能正常运行,现在就被拦截了。
问题根源
Android P及更高版本的系统,默认会阻止APP发起明文HTTP请求,只允许HTTPS协议的通信。你的WampServer用的是HTTP明文协议,所以系统直接拦截了这个请求,抛出了你看到的错误提示。
另外先提个小细节:你代码里的URL url = new URL(login_url");多了一个闭合双引号,这会导致语法错误,记得改成URL url = new URL(login_url);,不然即使解决了流量限制问题,代码也跑不起来哦。
三种解决办法(按推荐程度排序)
1. 允许特定域名的明文流量(推荐,安全)
这种方式只会放开你需要的WampServer地址,不会全局降低APP的安全性,是最优解:
- 第一步:在项目的
res/xml目录下(没有xml文件夹就新建一个),创建network_security_config.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <!-- 指定允许明文流量的域名,这里填你的WampServer地址 --> <domain includeSubdomains="true">192.168.1.2</domain> </domain-config> </network-security-config>
- 第二步:打开
AndroidManifest.xml,在<application>标签中添加配置引用:
<application ... android:networkSecurityConfig="@xml/network_security_config" ...> <!-- 其他组件配置 --> </application>
2. 全局允许明文流量(仅临时测试用,不推荐)
如果只是临时调试,不想折腾配置,可以直接在AndroidManifest.xml的<application>标签里加一行属性:
<application ... android:usesCleartextTraffic="true" ...> <!-- 其他组件配置 --> </application>
⚠️ 注意:这种方式会让APP所有HTTP请求都被允许,上线时绝对不能用,会带来严重的安全隐患。
3. 给WampServer配置HTTPS(最彻底的安全方案)
如果你的APP打算正式上线,或者想长期保持通信安全,最好的办法是给WampServer配置HTTPS证书:
- 可以生成自签名证书用于测试,或者申请免费的Let's Encrypt证书用于生产环境
- 在WampServer的Apache配置中开启HTTPS服务,绑定生成的证书
- 之后把请求地址改成
https://192.168.1.2/login.php,就不会再被系统拦截了
内容的提问来源于stack exchange,提问作者mugen23

