Java - быстрый способ проверить, существует ли URL-адрес

Привет, Я пишу программу, которая проходит через множество разных 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();
        }
    }
}

Ответ 3

Кажется, вы можете установить свойство тайм-аута, убедитесь, что оно приемлемо. И если у вас много URL-адресов для тестирования, выполните их параллельно, это будет намного быстрее. Надеюсь, это будет полезно.