2

这个问题可能有点太低级了,但我已经找不到答案了。

我正在输入下一段,以便您可以纠正我/解释我无意中提到的内容。你知道在网络浏览器中你可以从你自己的计算机上输入目录路径,然后它就会显示出来吗?显然,它也适用于本地网络中的页面。如果同一子网上有另一个页面,您可以使用“http://pagename/”访问它。

在我参与的网络上,有很多这样的页面,而且它们都(或大部分)有共同的单字名称,例如 "http://word/" 。我想使用 Java 测试常用词的字典,以查看哪些作为网络上的位置存在。当然,如果我知道网络上的 IP 地址范围,可能会有更简单的方法,我知道。但是,如果我尝试在地址栏中输入“http://word/”(我从 ping 获得)的 IP 地址,我会得到“找不到页面”页面。即使“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 时遇到问题?

4

3 回答 3

3

您应该检查 HTTP 响应代码。如果 URL 是“真实的”(用您的话来说)响应代码应该是 200。否则我相信您会得到其他响应代码。

使用 HttpUrlConnection.getResponseCode();

HttpUrlConnection 是 URLConnection 的子类。当您使用 HTTP 连接时,这实际上是您从中获得的openConnection(),因此您可以说:

网址文章=新网址(“http://word”);//示例 URL HttpURLConnection myConn = (HttpURLConnection)article.openConnection();

于 2010-12-08T07:38:32.350 回答
0

如果您只测试 http url,您可以将 URLConnection 转换为 HTTPUrlConnection 并检查 200 = HTTP_OK 的 HTTP 响应代码:

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

于 2010-12-08T08:28:53.400 回答
0

我想我已经想通了。

如果我没有捕获 IOException(由于 URL、URLConnection 和 Scanner),这段代码将无法编译,所以我不得不这样做try{/*code*/} catch(IOException oops){},但我什么也没做。我认为将 try/catch 放在我的问题中并不重要。UnknownHostException 和 MalformedURLException 扩展了 IOException,所以我已经在不知不觉中用Scanner.hasNext()或 with触发其中一个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 地址不起作用,我仍然想知道。

于 2010-12-08T19:19:40.110 回答