2013-04-24 70 views
5

私はjavaでウェブサイトダウンユーティリティを作ろうとしていますが、いくつか問題があります。ウェブサイトが存在するかどうかを確認してください

ウェブサイトが存在するかどうかを確認する方法はありますか?私は聞いてアクティブなhttpサーバは、(サイトがダウンしている)が存在しない間、localhostに接続しようとしたとき、すなわちそれはConnection refused: connectためIOExceptionを通過

URL url = new URL("http://localhost"); 
HttpURLConnection httpConnection = (HttpURLConnection) (url.openConnection()); 
int code = httpConnection.getResponseCode(); 
System.out.println("code: " + code); 

:私はウェブサイトがダウンしているかどうかを確認するために、これを試してみました。

私はそれが実際すなわち

URL url = new URL("http://www.sdfasfjkhaslfjkhaslkdjfhasldkjf.it"); 

を存在するがあれば、私のISPが自動的にランダムな広告ページに私をリダイレクトするので、私はHTTPステータスコード200を受信しない、いくつかのサイトでも同じことが起こるだろうと思いました私が探しているサイトは存在しません。

サイトがダウンしていると私のプログラムは「あなたのウェブサイトはダウンしています」と言っていますが、サイトが存在しない場合は「ああ、あなたのウェブサイトは起動しています!とてもいいです。

ウェブサイトが存在するかどうかを確認する方法はありますか?

+6

うわー、どのような悪いISP。 – eboix

+0

@eboixはい。残念ながら、私はすべてのイタリアのISPはこのように動作すると思います – BackSlash

+0

あなたのISPがあなたのようにあなたをリダイレクトするならば、それが利用できないと仮定することもできます。 –

答えて

1

ISPのDNS中毒に関するご意見をお読みください。あなたのISPは、あなたが制御しているDNSサーバに対して、すべてのNXDOMAINレスポンスを捕まえ、制御しているサーバに被害の結果を返します。

HTTPチェックを行う前に、Google Public DNSなどの公式に有効なDNSサーバーのようなAレコードのDNSチェックを行います。ドメインが無効な場合、Google Public DNSはNXDOMAINを返します。 Javaでは、必要なDNSレコードに直接アクセスするには、dnsjavaのようなものを使用する必要があります。

最終的には、2つのチェックを行います.1つは既知の正常な送信元に対する有効なDNSレコードであり、もう1つはHTTPが有効かどうかを確認するためのものです。

+1

Google DNSを設定せずにどうすれば確認できますか?アプリケーションのユーザに自分のDNS設定を変更するよう依頼することはできません。デフォルトのDNSとして設定せずにウェブサイトが解決された場合は、「尋ねる」方法がありますか? – BackSlash

+0

エンドユーザーのDNSサーバーは変更しません。ルックアップを行うには、アプリケーション内のDNSサーバーを設定します。コマンドプロンプト/ターミナルセッションタイプ 'nslookup kjfksadljfksl.com'を開いた場合、' nslookup kjfksadljfksl.com 8.8.8.8'と入力してください。あなたは 'nslookup'に、ISPのDNSサーバではなく、Googleに対して検索を行うように指示しています。あなたはあなたのコードで同様のことをするでしょう。 –

+0

'nslookup kjfksadljfksl.com 8.8.8.8'は、私のjavaアプリケーションからターミナルコマンドを実行する必要があることを意味します。もしそうでなければ、もっとうまくいくでしょう...私はdnsjavaを試してみます。 – BackSlash

1

httpConnection.setFollowRedirects(false)を設定することを示唆するJava - How to find the redirected url of a url?が見つかりました。実際のリダイレクトを行っている場合に役立ちます。彼らがリダイレクトしていないだけで、自分のコンテンツを提供している場合は、コンテンツがあなたが期待したものか、それが宣伝しているかどうかを検出する以外は、

0

あなたは追加することもできます。

HttpURLConnection.setFollowRedirects(false); 
// note : or 
//  httpConnection.setInstanceFollowRedirects(false); 

と制御:

(httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) 
関連する問題