【问题标题】:Check if URL exists (method doesn't work with "http://" string)检查 URL 是否存在(方法不适用于“http://”字符串)
【发布时间】:2012-05-25 09:37:25
【问题描述】:

在 Java 中,我试图验证 URL 是否存在。为此,我创建了一个 URL 对象,然后调用 URL.openConnection,然后调用 URLConnection.connect(),然后调用 URL.openStream()。这些都没有抛出这个 URL 的异常:“http://”,这是没有意义的。

我需要方法独立于协议。

【问题讨论】:

  • http:\` is an invalid protocol specification. http://` 是引用它的正确方法。 (注意 forward 斜杠,而不是您使用的 backslashes。)
  • 您的意思是:http://(正斜杠)?

标签: java network-programming


【解决方案1】:

获取响应码:

URL url = new URL("http://");
HttpURLConnection   conn = (HttpURLConnection)url.openConnection();
int rc = conn.getResponseCode();
conn.disconnect();

如果没有抛出异常,则 URL 存在。这个扔了

Exception in thread "main" java.lang.RuntimeException: java.lang.IllegalArgumentException: protocol = http host = null

对我来说。

【讨论】:

  • 太好了,谢谢。它不是独立于协议的,但我想我最终只会使用 http。
  • @Anthony 我应该补充一点,您需要检查响应代码。如果是 200,则资源存在。
  • 我想我可以为 url.getHost == null 添加一个检查,但这仍然有点奇怪
  • 实际上是 url.getHost() == null || url.getHost().length == 0
  • @Anthony 默认主机是'localhost',这表明你有一个运行在 localhost:80 的 HTTP 服务器。所以代码工作正常。
【解决方案2】:

如果您尝试检查 url 是否有效,然后执行请求,您可以使用公共验证器 (http://commons.apache.org/validator/),这样您就可以执行 openConnection(),以防 url 确实有效。

此处的文档和示例:http://commons.apache.org/validator/apidocs/org/apache/commons/validator/UrlValidator.html

【讨论】:

  • 有没有办法在不使用库的情况下做到这一点?只是java。
猜你喜欢
  • 2012-01-05
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
  • 2012-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-06
相关资源
最近更新 更多