2010-12-08 29 views
2

Cette question est peut-être un peu trop faible, mais je n'ai pas trouvé de réponse.Vérification des URL aléatoires sur un réseau Java

je tape ce paragraphe suivant de sorte que vous pouvez me corriger/expliquer les choses que je fais référence à leur insu. Vous savez dans un navigateur Web que vous pouvez taper des chemins de répertoire à partir de votre propre ordinateur, et il les affichera? Apparemment, il fonctionne également avec des pages au sein d'un réseau local. S'il y a une autre page sur le même sous-réseau, vous pouvez y accéder avec "http: // pagename /".

Sur le réseau dont je fais partie, il y a beaucoup de ces pages, et elles ont toutes (ou presque) des noms communs à un mot, comme "http: // word /". Je veux tester, en utilisant Java, un dictionnaire de mots communs pour voir qui existent en tant qu'emplacements sur le réseau. Bien sûr, il y a probablement un moyen plus simple si je connais la gamme d'adresses IP sur le réseau, ce que je fais. Cependant, je reçois la page "page introuvable" si j'essaie de taper l'adresse IP de, disons, "http: // mot /" (que je reçois du ping), dans la barre d'adresse. Cela est vrai même si "http: // word /" fonctionne.

le dire boucle I par ma banque de mots. Comment puis-je tester si une URL est réelle? J'ai trouvé comment charger ma banque de mots. Voici ce que j'ai en ce moment

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 

Ceci fonctionne lorsque l'URL est construite avec une URL valide. Quand il est passé une mauvaise URL, le programme ignore simplement le System.out.println, ne faisant même pas une nouvelle ligne. Je sais que différents navigateurs montrent différents écrans "page non trouvée", et qu'ils ont leur propre code source html. Peut-être que c'est lié à mon problème?

Comment puis-je tester si une URL est réel en utilisant cette méthode? Y at-il un moyen de le tester avec des adresses IP, compte tenu de mon problème? ou, pourquoi ai-je un problème en tapant l'adresse IP et non l'URL?

Répondre

3

Vous devriez vérifier le code de réponse HTTP. Si l'URL est "réelle" (selon vos termes), le code de réponse devrait être 200. Sinon, je crois que vous obtiendrez un autre code de réponse.

le faire en utilisant HttpUrlConnection.getResponseCode();

HttpURLConnection est une sous-classe de URLConnection. Lorsque vous vous connectez avec HTTP, c'est ce que vous obtenez de openConnection(), donc vous pouvez dire:

URL article = new URL ("http: // word"); // exemple d'URL HttpURLConnection myConn = (HttpURLConnection) article.openConnection();

0

Si vous testez que http urls vous pouvez jeter le URLConnection à un HttpURLConnection et vérifier le code de réponse HTTP pour 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 
} 

En outre, si vous voulez tester les adresses IP que vous van utilisez simplement comme url: http://10.0.0.1

0

Je pense que je l'ai compris.

Ce code ne compilerait pas sans moi attraper IOException (en raison de l'URL, URLConnection et Scanner), donc j'ai dû try{/*code*/} catch(IOException oops){}, avec lequel je n'ai rien fait. Je ne pensais pas qu'il était important de mettre le try/catch dans ma question. UnknownHostException et MalformedURLException étendent IOException, donc j'en déclenchais déjà involontairement un avec Scanner.hasNext() ou avec HttpURLConnection.getResponseCode(), l'attrapant, et quittant le bloc try.Ainsi, je n'ai jamais eu de code de réponse quand j'avais une mauvaise URL. Donc j'ai besoin d'écrire

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

Merci pour l'aide de tout le monde, j'ai beaucoup appris. Si vous avez une réponse différente/meilleure ou si vous pouvez répondre pourquoi l'utilisation des adresses IP n'a pas fonctionné, je me pose toujours la question.