2

接続したい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。どの例外を使用する必要がありますか、または他に何をする必要がありますか?

4

1 に答える 1

3

Aは、URLが実際に不正な形式である場合、つまりURL仕様MalFormedURLExceptionに準拠していない場合にのみスローされ、存在しない場合にはスローされません。これは、クラスのコンストラクターによってスローされたカバーの下にあります。そのjavadocは次のように伝えます。java.net.URL

スロー

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.
}
于 2011-10-25T17:47:29.080 に答える