Android中Http请求报错java.net.UnknownServiceException: CLEARTEXT communication to xxx not permitted by ne


Hi, I’m Shendi


Android中Http请求报错java.net.UnknownServiceException: CLEARTEXT communication to xxx not permitted by network security policy




问题描述

在 Android 中,使用 okhttp 进行 https 请求没有问题,http 请求报错:

java.net.UnknownServiceException: CLEARTEXT communication to 192.168.0.111 not permitted by network security policy

在这里插入图片描述



问题原因

从Android 9(API级别28)开始,默认情况下,Android应用不允许进行明文网络流量传输,也就是说不支持http,仅支持https。这是出于安全考虑,因为明文传输可能会使你的数据传输暴露于风险之中。



问题解决

有两个办法,先说最简单的一种

直接在清单文件(AndroidMinifest.xml)的Application中增加 android:usesCleartextTraffic="true"

<application android:usesCleartextTraffic="true">
</application>

这种方法会对应用的所有网络请求开放明文传输,没有更细粒度的控制。这意味着所有的网络请求都可以使用HTTP,而不仅仅是对特定的请求开放。


第二种方法

在你的Android项目的res目录下创建一个xml文件夹(如果还没有的话),然后在该文件夹下创建一个名为network_security_config.xml的文件。文件内容如下:

<?xml version="1.0" encoding="utf-8"?>  
<network-security-config>  
    <base-config cleartextTrafficPermitted="true">  
        <trust-anchors>  
            <certificates src="system" />  
            <certificates src="user" />  
        </trust-anchors>  
    </base-config>  
</network-security-config>

然后,在你的AndroidManifest.xml文件中添加以下属性:

<application  
    android:usesCleartextTraffic="true"  
    android:networkSecurityConfig="@xml/network_security_config">  
    ...  
</application>

请注意,这是一个全局的设置,会影响到你的应用所有的网络请求。如果你只是需要对某个特定的请求开放明文网络,你可能需要在代码中更细致地处理这个问题。同时请注意这样做可能会有安全风险,因为它会使你的数据传输暴露在可能的攻击之下。

所以请尽可能的使用https来进行网络请求,这样才能更好的保证数据的安全性。




END

猜你喜欢

转载自blog.csdn.net/qq_41806966/article/details/134460733