【问题标题】:Java - Load content from IP instead of domainJava - 从 IP 而不是域加载内容
【发布时间】:2020-07-04 09:12:26
【问题描述】:

当我从服务器加载内容时,此代码工作正常,但是当我用 IP 地址替换服务器 URL 时,我得到 IOException 错误。

有什么想法吗?

String URLToFetch = "http://www.example.com";
final URL url = new URL(URLToFetch);
URLConnection c = url.openConnection();
c.setUseCaches(false);
c.setConnectTimeout(8000);
c.setReadTimeout(8000);

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String str;
if ((str = in.readLine()) != null) {
    Log.i("tag", "Result from HTTP: " + str.toString());
}
in.close();

我什至用过这个但是没用

final URL url = new URL("http", ServerIpAddress, 80, "/index.php");

谢谢

【问题讨论】:

  • 为什么要用 IP 地址替换服务器 URL?网络不是这样工作的
  • 我正在从 10 个没有连接任何域的并行服务器加载内容。
  • 1/ 你说你遇到了一个错误。错误信息是什么? 2/ 您是否验证了服务器正在工作,使用的不是您自己的程序?
  • 是的,服务器工作正常。这是一个 IOException 错误。我什至确保服务器允许跨源。我什至尝试从 127.0.0.1 和 192.168.1.230 上的本地计算机加载,但它不起作用。
  • 你能发布完整的堆栈跟踪吗? “IOException 错误”没有提供足够的信息来做任何事情。

标签: java android http url


【解决方案1】:

我终于找到了问题所在。错误说: 不允许到(服务器 IP)的明文 http 流量

问题来了:

从 Android 9(API 级别 28)开始,默认禁用明文支持。

解决这个问题我需要做的就是将它添加到我的清单中:

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:usesCleartextTraffic="true"
        ...>
        ...
    </application>
</manifest>

【讨论】:

  • 但是...您说http://www.example.com 工作正常。不可能的。那样也行不通。
  • 域工作正常。只有 ip 地址加载失败。
猜你喜欢
  • 2015-02-03
  • 1970-01-01
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-07
相关资源
最近更新 更多