Android9.0 无法访问http网络请求的解决方案

  • Post author:
  • Post category:其他


在android9.0以上由于安全性高了,所有不做处理http不能使用,如果想要使用http请求的,有以下3种解决方法


1.最简单的方法降级targetSdkVersion的版本

将 targetSdkVersion 将到27或27以下


2.服务器请求不管是正式环境还是测试环境,把http改为https (推荐使用,https的安全行高)


3.兼容http请求


用Retrofit请求网络报这个错CLEARTEXT communication to host not permitted by network

由于 Android P 限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉。

如果当前应用的请求是 htttp 请求,而非 https ,这样就会导系统禁止当前应用进行该请求,如果 WebView 的 url 用 http 协议,同样会出现加载失败,https 不受影响。

为此,OkHttp3 做了检查,所以如果使用了明文流量,默认情况下,在 Android P 版本 OkHttp3 就抛出异常: CLEARTEXT communication to ” + host + ” not permitted by network security policy

     if (!Platform.get().isCleartextTrafficPermitted(host)) {
          throw new RouteException(new UnknownServiceException(
          "CLEARTEXT communication to " + host + " not permitted by network security policy"));
     }

(1):在清单文件中设置networkSecurityConfig属性

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

2)在res/xml文件夹下创建network_security_config.xml

<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>



版权声明:本文为qq_36707431原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。