2013-04-24 29 views
5

Ich versuche, ein Is-Website-Down-Dienstprogramm mit Java zu machen, aber ich habe ein paar Probleme.Überprüfen Sie, ob die Website existiert

Gibt es eine Möglichkeit zu überprüfen, ob eine Website existiert? Ich habe versucht, dies zu sehen, ob eine Website nach unten ist:

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

Es durch IOException für Connection refused: connect geht, wenn das heißt ich versuche, auf localhost zu verbinden, während es keinen aktiven HTTP-Server zu hören ist (die Seite nicht erreichbar ist).

Ich dachte, es die gleiche Sache mit einem gewissen Ort passieren würde, die eigentlich nicht das heißt

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

existiert aber ich erhalte einen HTTP-Statuscode 200, weil mein ISP leitet mich automatisch in eine zufällige Anzeigenseite, wenn die Website, nach der ich suche, existiert nicht.

Also, wenn eine Website nicht verfügbar ist, sagt mein Programm "Nun, Ihre Website ist down", aber wenn die Website nicht existiert mein Programm sagt "Oh, Ihre Website läuft und läuft!", Und das ist nicht wirklich gut.

Gibt es eine Möglichkeit zu überprüfen, ob eine Website existiert?

+6

Wow, was für einen schlechten ISP. – eboix

+0

@eboox Ja. Leider denke ich, dass jeder italienische ISP so funktioniert – BackSlash

+0

Wenn Ihr ISP Sie so weiterleitet, können Sie auch annehmen, dass es nicht verfügbar ist. –

Antwort

1

Lesen Sie Ihre Kommentare über die DNS-Vergiftung des ISP. Ihr Internetdienstanbieter gibt Ihnen einen DNS-Server, über den Sie die Kontrolle haben, der alle NXDOMAIN-Antworten abruft und Ihnen ein vergiftetes Ergebnis an einen von ihnen kontrollierten Server zurückgibt.

Ich würde eine DNS-Prüfung für einen A-Eintrag mit etwas wie Google Public DNS oder einem anderen öffentlich bekannten gültigen DNS-Server tun, bevor Sie die HTTP-Prüfung durchführen. Google Public DNS gibt NXDOMAIN zurück, wenn die Domäne ungültig ist. In Java müssen Sie möglicherweise einen Wert wie dnsjava verwenden, um direkten Zugriff auf die benötigten DNS-Einträge zu erhalten.

Am Ende führen Sie zwei Prüfungen durch, eine für einen gültigen DNS-Eintrag gegen eine bekannte gute Quelle, dann eine weitere, um zu sehen, ob HTTP am Leben ist.

+1

Wie kann ich Google DNS überprüfen, ohne sie zu setzen? Ich kann den Anwendungsbenutzer nicht bitten, seine DNS-Einstellungen zu ändern. Gibt es eine Möglichkeit, sie zu fragen, wenn eine Website aufgelöst wird, ohne sie als Standard-DNS festzulegen? – BackSlash

+0

Sie würden die DNS-Server des Endbenutzers nicht ändern. Sie würden den DNS-Server in Ihrer Anwendung für die Suche einrichten. Wenn Sie eine Eingabeaufforderung/Terminal-Sitzung öffnen, geben Sie 'nslookup kjfksadljfksl.com' ein und geben Sie dann 'nslookup kjfksadljfksl.com 8.8.8.8' ein. Sie sagen 'nslookup', das Nachschlagen gegen Google durchzuführen und nicht gegen die DNS-Server Ihres ISPs. Sie würden eine ähnliche Sache in Ihrem Code tun. –

+0

'nslookup kjfksadljfksl.com 8.8.8.8 'bedeutet, dass ich Terminalbefehle aus meiner Java-Anwendung ausführen muss, es wäre besser, wenn ich nicht ... Ich werde dnsjava versuchen, vielleicht löst es alle meine Probleme! – BackSlash

1

Nur gefunden Java - How to find the redirected url of a url?, was die Einstellung httpConnection.setFollowRedirects (false) schlägt - das könnte helfen, wenn sie tatsächlich Weiterleitungen tun. Wenn sie nicht weiterleiten, sondern nur ihren eigenen Inhalt anbieten, ist es nicht sicher, dass es viel zu tun gibt, außer zu erkennen, ob der Inhalt das ist, was Sie erwartet haben oder ob es Werbung ist.

0

Möchten Sie folgendes hinzufügen:

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

und Kontrolle:

(httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) 
Verwandte Themen