2010-12-08 9 views
2

この質問は低すぎるかもしれませんが、回答が見つかりませんでした。Javaのネットワーク上のランダムなURLを確認してください

私はあなたが私を修正することができるように、この次の段落を入力しています。私が無意識のうちに参照するものについて説明します。 Webブラウザでは、自分のコンピュータからディレクトリパスを入力することができます。明らかに、ローカルネットワーク内のページでも動作します。同じサブネット上に別のページがある場合は、「http:// pagename /」でアクセスできます。

私はネットワークの一部であり、多くのページがあり、すべて(またはほとんど)は「http:// word /」などの一般的な単一単語の名前を持っています。私は、一般的な単語の辞書であるJavaを使って、ネットワーク上のどの場所に存在するかを調べたいと思っています。もちろん、私がネットワーク上のIPアドレスの範囲を知っていれば、もっと簡単な方法があります。しかし、「http:// word /」(pingから取得)のIPアドレスをアドレスバーに入力しようとすると「ページが見つかりません」というページが表示されます。これは "http:// word /"が機能していても当てはまります。

だから、私は自分のワードバンクをループします。 URLが本当であるかどうかをテストするにはどうすればよいですか? 私はワードバンクを読み込む方法を工夫しました。ここに私が今いるものはありますか

URL article=new URL("http://word"); //sample URL 
URLConnection myConn=article.openConnection(); 
Scanner myScan=new Scanner(new InputStreamReader(myConn.getInputStream())); 
    System.out.println(myScan.hasNext()); //Diagnostic output 

これは、URLが有効なURLで構成されている場合に機能します。悪いURLが渡されると、プログラムは新しい行を作成することなく、System.out.printlnを無視します。私は、さまざまなブラウザが異なる「ページが見つかりません」という画面を表示し、これらの画面には独自のHTMLソースコードがあることを知っています。多分それは私の問題に関係していますか?

この方法でURLが実際のものであるかどうかをテストするにはどうすればよいですか? 問題がある場合、IPアドレスでテストする方法はありますか?または、IPアドレスを入力してURLを入力するのに問題が発生するのはなぜですか?

答えて

3

HTTP応答コードを確認する必要があります。 URLが「本当」(あなたの言葉では)の場合、レスポンスコードは200にする必要があります。それ以外の場合は、他のレスポンスコードが返ってくると思います。

HttpUrlConnection.getResponseCode();を使用して行います。

HttpUrlConnectionはURLConnectionのサブクラスです。実際にあなたがopenConnection()から得るものであるHTTPと接続しているときは、こう言うことができます:

URL記事=新しいURL( "http:// word"); //サンプルURL HttpURLConnection myConn =(HttpURLConnection)article.openConnection();

0

あなたはHTTP URLを使用すると、HttpURLConnectionのにURLConnectionのをキャストし、200 = HTTP_OKのためのHTTPレスポンスコードを確認することができる唯一のテストしている場合:

URL article=new URL("http://word"); //sample URL 
HttpURLConnection myConn= (HttpURLConnection)article.openConnection(); 
if (myConn.getResponseCode() == HttpURLConnection.HTTP_OK) { 
    // Site exists and has valid content 
} 

テストしたい場合はさらにIPは、あなたがバン単にそれを使用するアドレスURLとして: http://10.0.0.1

0

私はそれを理解したと思います。

私は何もしなかったtry{/*code*/} catch(IOException oops){}に持っていたので、私はIOException(URL、URLConnection、およびスキャナのために)をキャッチせずにこのコードをコンパイルしませんでした。私はtry/catchを私の質問に入れておくことが重要だとは思わなかった。 UnknownHostExceptionとMalformedURLExceptionはIOExceptionを拡張するので、すでに無意識にScanner.hasNext()またはHttpURLConnection.getResponseCode()のいずれかをトリガーして、キャッチしてtryブロックを終了していました。したがって、私は悪いURLを持っていたとき、私は決して応答コードを持っていません。だから私は書く必要があります

 try 
       { 
        URL article=new URL("http://word"); 
        HttpURLConnection myConn=(HttpURLConnection)article.openConnection(); 
        //code to store "http://word" as a working URL 
       } 
     catch (UnknownHostException ex) {/*code if "http://word" is not a working URL*/} 
     catch (IOException oops) {oops.printStackTrace();} 

皆様のおかげで、私はたくさんのことを学びました。あなたが異なる/より良い答えを持っているか、IPアドレスを使っていない理由が答えられたら、私はまだそれを疑っています。