📜  HTTP 失败:java.net.UnknownServiceException:网络安全策略不允许与 ztdev.co.za 进行 CLEARTEXT 通信 - Java (1)

📅  最后修改于: 2023-12-03 14:42:00.166000             🧑  作者: Mango

HTTP 失败:java.net.UnknownServiceException:网络安全策略不允许与 ztdev.co.za 进行 CLEARTEXT 通信 - Java

介绍

当程序员在使用 Java 进行网络通信时,可能会接收到如下错误提示:

HTTP 失败:java.net.UnknownServiceException:网络安全策略不允许与 ztdev.co.za 进行 CLEARTEXT 通信

这个错误提示告诉我们,当我们尝试与 ztdev.co.za 进行 CLEARTEXT 通信时,网络安全策略禁止了这种操作,导致请求失败。

原因

这个错误的原因在于 Android 9.0(API 级别 28) 开始默认禁止明文流量的网络请求。在这种情况下,如果你尝试使用未加密的 HTTP 连接请求网络资源,Android 会拒绝这些请求。

解决方案

为了解决这个问题,你可以使用以下方法之一:

  1. 将远程服务器 ztdev.co.za 从使用 CLEARTEXT 连接修改为使用 HTTPS 连接。这是最好的解决方案,因为它提供了安全的网络通信。

  2. 在 Android 的 AndroidManifest.xml 文件中添加以下代码,以使你的应用允许使用CLEARTEXT通信:

<application
    android:usesCleartextTraffic="true"
    ...
</application>
  1. 在连接到 ztdev.co.za 的位置设置属性,以允许使用 CLEARTEXT 通信:
URL url = new URL("http://ztdev.co.za");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
    conn.setConnectTimeout(10000);
    conn.setReadTimeout(10000);
    conn.setUseCaches(false);
    conn.setRequestMethod("GET");
    // 添加以下代码
    conn.setRequestProperty("Connection", "close");
}

注意:这种解决方案并不建议经常使用,因为它降低了安全性。

总结

在 Android 9 及以上版本中,系统默认禁止了使用CLEARTEXT连接的网络请求,这是防止数据在网络传输过程中被窃取的一种重要方式。因此,我们需要在使用网络请求时注意该问题并采取相应的措施。