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

21

嗨,我正在编写一个程序,用于检查许多不同的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个回答

32
尝试发送“HEAD”请求而不是“GET”请求。这样会更快,因为响应正文不会被下载。
huc.setRequestMethod("HEAD");

与其检查响应状态是否不是400,不如检查是否为200。也就是说,检查正面而不是反面。404、403、402…所有40x状态几乎等同于无效的不存在的URL。

您可以利用多线程使其更快。


关于这个方法有一个快速的问题 - 是否可以使用这种方式更改引荐人或用户代理呢? - M9A
设置用户代理可以使用huc.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.0 Safari/532.5");方法。您还可以使用setRequestProperty()方法设置引荐者。 - Vishnuprasad R
设置用户代理:huc.setRequestProperty("User-Agent","您的用户代理") - Vishnuprasad R
设置引荐人,请使用 setRequestProperty("Referrer", "您的引荐人 URL"); - Vishnuprasad R

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

这对于域名后面有路径的URL无效。 - Sridhar Sarnobat

0

看起来你可以设置超时属性,确保它是可接受的。如果你有很多要测试的URL,请并行处理它们,这样会更快。希望这对你有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接