Java - 检查URL是否存在的最快方法

时间:2013-08-08 19:42:36

标签: java url jsoup

您好我正在编写一个程序,该程序遍历许多不同的URL,只检查它们是否存在。我基本上检查返回的错误代码是否为404。但是,当我检查超过1000个URL时,我希望能够非常快速地完成此操作。以下是我的代码,我想知道如何将其修改为快速工作(如果可能):

final URL url = new URL("http://www.example.com");
HttpURLConnection huc = (HttpURLConnection) url.openConnection();
int responseCode = huc.getResponseCode();

if (responseCode != 404) {
System.out.println("GOOD");
} else {
System.out.println("BAD");
}

使用JSoup会更快吗?

我知道有些网站提供代码200并有自己的错误页面,但我知道我正在检查的链接不这样做,所以这不是必需的。

3 个答案:

答案 0 :(得分:29)

尝试发送“HEAD”请求而不是获取请求。这应该更快,因为没有下载响应正文。

huc.setRequestMethod("HEAD");

再次检查响应状态是否为400,而不是检查它是否为200.检查是否为正而不是负。 404,403,402 ..所有40x状态几乎相当于无效的无效网址。

您可以使用多线程来加快速度。

答案 1 :(得分:1)

尝试询问下一个DNS服务器

class DNSLookup
{
    public static void main(String args[])
    {
        String host = "stackoverflow.com";
        try
        {
            InetAddress inetAddress = InetAddress.getByName(host);
            // show the Internet Address as name/address
            System.out.println(inetAddress.getHostName() + " " + inetAddress.getHostAddress());
        }
        catch (UnknownHostException exception)
        {
            System.err.println("ERROR: Cannot access '" + host + "'");
        }
        catch (NamingException exception)
        {
            System.err.println("ERROR: No DNS record for '" + host + "'");
            exception.printStackTrace();
        }
    }
}

答案 2 :(得分:0)

似乎你可以设置超时属性,确保它是可以接受的。如果你有很多网址要测试,并行进行测试,它会快得多。希望这会有所帮助。