Как быстро проверить, если URL существует и имеет контент в Java? - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь проверить, существуют ли сотни URL-адресов, и мой нынешний способ занимает слишком много времени.Это то, что я нашел до сих пор:

public static boolean checkURL(URL u)
{
HttpURLConnection connection = null;
try
{
  connection = (HttpURLConnection) u.openConnection();
  connection.setRequestMethod("HEAD");
  int code = connection.getResponseCode();
  System.out.println("" + code);
  // You can determine on HTTP return code received. 200 is success.
  if (code == 200)
  {
    return true;
  }
  else
  {
    return false;
  }
}
catch (MalformedURLException e)
{
  // TODO Auto-generated catch block
  // e.printStackTrace();
  System.out.println("error");
}
catch (IOException e)
{
  System.out.println("error2");
  // TODO Auto-generated catch block
  // e.printStackTrace();
}
finally
{
  if (connection != null)
  {
    connection.disconnect();
}
}

return false;
}

Несмотря на то, что он успешно определяет, существует ли URL-адрес и имеет ли он содержимое, он делает это в течение длительного периода времени, причем программа часто занимает более пяти минут.выполнить.Кто-нибудь знает более эффективные способы проверки этого?

Примечание. Важно проверить, что не только URL возвращает 200, но также и то, что веб-сайт не истекает.

1 Ответ

0 голосов
/ 14 ноября 2018

Ваш код выглядит хорошо, и это должен быть самый простой способ проверить URL. Возможно, вы захотите добавить время ожидания в HttpURLConnection.

Пример кода для справки.

enter code here
import java.net.HttpURLConnection;
import java.net.URL;

public class UrlChecker {
public static void main(String[] args) {
System.out.println(URLExists("http://slowwly.robertomurray.co.uk/delay/
3000/url/http://www.google.co.uk"));
}

public static boolean URLExists(String targetUrl) {
    HttpURLConnection urlConnection;
    try {
        urlConnection = (HttpURLConnection) new 
        URL(targetUrl).openConnection();
        urlConnection.setRequestMethod("HEAD");
        // Set timeouts 2000 in milliseconds and throw exception
        urlConnection.setConnectTimeout(2000);
        urlConnection.setReadTimeout(2000);
       /* Set timeouts 4000 in milliseconds and it should work as the url 
        should return back in 3 seconds.
        httpUrlConn.setConnectTimeout(4000);
        httpUrlConn.setReadTimeout(4000);
        */
        System.out.println("Response Code =>"+ 
        urlConnection.getResponseCode());
        System.out.println("Response Msg =>"+ 
        urlConnection.getResponseMessage());
        return (urlConnection.getResponseCode() == 
        HttpURLConnection.HTTP_OK);
    } catch (Exception e) {
        System.out.println("Exception => " + e.getMessage());
        return false;
    }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...