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

2022-09-02 03:37:08

嗨,我正在编写一个程序,该程序通过许多不同的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,并有自己的错误页面,但是我知道我正在检查的链接不会这样做,所以这不是必需的。


答案 1

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

huc.setRequestMethod("HEAD");

同样,与其检查响应状态是否不是 400,不如检查它是否为 200。这是检查正数而不是负数。404,403,402.. 所有 40x 状态几乎等同于无效的不存在的 url。

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


答案 2

尝试询问下一个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();
        }
    }
}