Проверьте случайные URL-адреса в сети на Java - PullRequest
2 голосов
/ 08 декабря 2010

Этот вопрос может быть слишком низкоуровневым, но я не смог найти ответ уже.

Я набираю следующий абзац, чтобы вы могли исправить меня / объяснить то, на что я ссылаюсь, невольно. Вы знаете, что в веб-браузере вы можете вводить пути к каталогам со своего компьютера, и это приведет к их появлению? По-видимому, он также работает со страницами в локальной сети. Если в той же подсети есть другая страница, вы можете получить к ней доступ с помощью "http://pagename/".

В сети, частью которой я являюсь, таких страниц много, и все они (или в основном) имеют общие имена, состоящие из одного слова, такие как "http://word/". Я хочу проверить, используя Java словарь общих слов, чтобы увидеть, какие существуют как местоположения в сети. Конечно, возможно, есть более простой способ, если я знаю диапазон IP-адресов в сети, что я и делаю. Однако я получаю «страницу не найдена» страницу, если я попытаюсь ввести IP-адрес, скажем, "http://word/" (который я получаю от ping), в адресную строку. Это верно, даже если "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 ]

3 голосов
/ 08 декабря 2010

Вы должны проверить код ответа HTTP. Если URL является «реальным» (в ваших терминах), код ответа должен быть 200. В противном случае я считаю, что вы получите другой код ответа.

Сделайте это, используя HttpUrlConnection.getResponseCode ();

HttpUrlConnection является подклассом URLConnection. Когда вы подключаетесь по HTTP, это то, что вы получаете от openConnection(), поэтому вы можете сказать:

URL article = новый URL ("http://word"); // пример URL" HttpURLConnection myConn = (HttpURLConnection) article.openConnection ();

0 голосов
/ 08 декабря 2010

Я думаю, я понял это.

Этот код не скомпилировался бы, если бы я не перехватил IOException (из-за URL, URLConnection и Scanner), поэтому мне пришлось try{/*code*/} catch(IOException oops){}, что я и сделалничего сЯ не думаю, что было важно поставить попытку / поймать в моем вопросе.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-адресов не сработало, мне все равно интересно, что это.

0 голосов
/ 08 декабря 2010

Если вы тестируете только http-URL, вы можете преобразовать URLConnection в HTTPUrlConnection и проверить код ответа HTTP для 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
}

Кроме того, если вы хотите проверить IP-адреса, вы можете просто использовать его как URL: http://10.0.0.1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...