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-адресов для тестирования, выполните их параллельно, это будет намного быстрее. Надеюсь, это будет полезно.