2010-12-08 8 views
2

Diese Frage ist vielleicht ein wenig zu niedrig, aber ich konnte keine Antwort bereits finden.Überprüfen Sie zufällige URLs in einem Netzwerk in Java

Ich schreibe diesen nächsten Absatz, damit Sie mich korrigieren/erklären können, was ich unwissentlich rede. Sie wissen in einem Webbrowser können Sie Verzeichnispfade von Ihrem eigenen Computer eingeben, und es wird sie aufstellen? Offensichtlich funktioniert es auch mit Seiten innerhalb eines lokalen Netzwerks. Wenn sich im selben Subnetz eine andere Seite befindet, können Sie mit "http: // Seitenname /" darauf zugreifen.

Im Netzwerk bin ich ein Teil von, es gibt viele dieser Seiten, und sie alle (oder meistens) haben gemeinsame, einzelne Wortnamen wie "http: // Wort /". Ich möchte mit Java ein Wörterbuch gängiger Wörter testen, um zu sehen, welche als Orte im Netzwerk existieren. Natürlich gibt es einen einfacheren Weg, wenn ich die Reichweite der IP-Adressen im Netzwerk kenne, was ich tue. Ich bekomme jedoch die Seite "Seite nicht gefunden", wenn ich versuche, die IP-Adresse von, sagen wir, "http: // Wort /" (die ich von Ping bekomme) in die Adressleiste eingeben. Dies gilt auch dann, wenn "http: // word /" funktioniert.

Also sagen, ich durchläuft meine Wortbank. Wie kann ich testen, ob eine URL echt ist? Ich habe herausgefunden, wie ich meine Wortbank laden kann. Hier ist, was ich gerade habe

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 

Dies funktioniert, wenn die URL mit einer gültigen URL erstellt wird. Wenn es eine schlechte URL passiert, ignoriert das Programm einfach die System.out.println, nicht einmal eine neue Zeile. Ich weiß, dass verschiedene Browser unterschiedliche "Seite nicht gefunden" Bildschirme zeigen, und dass diese ihren eigenen HTML-Quellcode haben. Vielleicht hängt das mit meinem Problem zusammen?

Wie kann ich testen, ob eine URL mit dieser Methode real ist? Gibt es eine Möglichkeit, es mit IP-Adressen zu testen, angesichts meines Problems? oder, warum habe ich ein Problem mit der Eingabe der IP-Adresse und nicht der URL?

Antwort

3

Sie sollten den HTTP-Antwortcode überprüfen. Wenn URL "echt" ist (in Ihren Begriffen) sollte der Antwortcode 200 sein. Ansonsten glaube ich, dass Sie einen anderen Antwortcode erhalten werden.

Verwenden Sie dazu HttpUrlConnection.getResponseCode();

HttpUrlConnection ist eine Unterklasse von URLConnection. Wenn Sie mit HTTP verbinden, was Sie tatsächlich von openConnection() erhalten, können Sie also sagen:

URL Artikel = neue URL ("http: // Wort"); // Beispiel URL HttpURLConnection myConn = (HttpURLConnection) article.openConnection();

0

Wenn Sie testen nur http-URLs Sie die URLConnection zu einem HttpURLConnection werfen kann und überprüfen Sie die HTTP-Response-Code für 200 = HTTP_OK:

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 
} 

Zusätzlich, wenn Sie einfach IP-Adressen, die Sie van es verwenden, um testen wollen als url: http://10.0.0.1

0

Ich denke, ich habe es herausgefunden.

Dieser Code würde nicht kompilieren ohne mich IOException (wegen URL, URLConnection und Scanner) zu fangen, so musste ich try{/*code*/} catch(IOException oops){}, mit dem ich nichts tat. Ich dachte nicht, dass es wichtig ist, den Versuch/Fang in meine Frage zu stellen. UnknownHostException und MalformedURLException erweitern IOException, also habe ich bereits versehentlich einen von ihnen mit Scanner.hasNext() oder mit HttpURLConnection.getResponseCode() ausgelöst, abgefangen und den try-Block verlassen.Daher bekam ich nie einen Antwortcode, wenn ich eine schlechte URL hatte. Also muss ich schreiben

 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();} 

Danke für die Hilfe von allen, ich habe viel gelernt. Wenn Sie eine andere/bessere Antwort haben oder wenn Sie beantworten können, warum die Verwendung der IP-Adressen nicht funktioniert hat, frage ich mich immer noch.