【问题标题】:How to check if an URL doesn't exist?如何检查 URL 是否不存在?
【发布时间】:2011-12-14 19:59:14
【问题描述】:

我试图检查我想要连接的 URL 是否存在。这是我的尝试:

try {
    // Connect to the url
    document = Jsoup.connect("http://www.malformedurl.com").get();
    tags = document.select(".tags .tag a");
    num = document.select(".tag .count");
    // Take the wanted data 
    UrlFunctions.UrlParse(tags, num);
} catch (java.net.MalformedURLException e) {
    System.out.println("URL DOESNT EXIST");
}

运行之后,我没有收到消息URL DOESNT EXIST。我应该使用什么例外,或者我应该怎么做?

【问题讨论】:

    标签: java networking jsoup malformedurlexception


    【解决方案1】:

    MalFormedURLException 只会在 URL 真的 格式错误时抛出,即它不符合 URL spec,而不是在它不存在时。这是java.net.URL 类的构造函数所掩盖的。它的javadoc 告诉以下内容:

    抛出

    MalformedURLException - 如果字符串指定了未知协议。

    所以,只有当您使用 "www.malformedurl.com""foo://www.malformedurl.com" 而不是 "http://www.malformedurl.com"

    要检测 URL 是否存在,您最好采用不同的解决方案。如果主机名未知,则应改为使用UnknownHostException

    try {
        document = Jsoup.connect("http://www.malformedurl.com").get();
        // ...
    } catch (UnknownHostException e) {
        System.err.println("Unknown host");
        e.printStackTrace(); // I'd rather (re)throw it though.
    }
    

    这不一定是对方的问题,也可能是你网络上的DNS服务器是假的。

    或者,要检测 IP 地址是否可达,则应改为捕获 SocketTimeoutException

    try {
        document = Jsoup.connect("http://12.34.56.78").get();
        // ...
    } catch (SocketTimeoutException e) {
        System.err.println("IP cannot be reached");
        e.printStackTrace(); // I'd rather (re)throw it though.
    }
    

    【讨论】:

      猜你喜欢
      • 2020-07-05
      • 2011-05-09
      • 1970-01-01
      • 2016-07-08
      • 2019-12-10
      • 2010-10-29
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多