2013-08-08 15 views
17

Witam Piszę program, który przechodzi przez wiele różnych adresów URL i po prostu sprawdza, czy istnieją, czy nie. Zasadniczo sprawdzam, czy zwrócono kod błędu 404, czy nie. Jednak podczas sprawdzania ponad 1000 adresów URL, chcę móc to zrobić bardzo szybko. Poniżej zamieszczona jest mój kod, zastanawiałem się, w jaki sposób można go zmodyfikować, aby szybko działać (jeśli to możliwe):Java - Najszybszy sposób sprawdzenia, czy URL istnieje

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

byłoby szybsze w użyciu JSoup?

Mam świadomość, że niektóre witryny podają kod 200 i mają własną stronę błędu, ale wiem, że linki, które sprawdzam, nie robią tego, więc nie jest to konieczne.

Odpowiedz

28

spróbować wysyłając żądanie „głowa” zamiast dostać wniosek. To powinno być szybsze, ponieważ treść odpowiedzi nie została pobrana.

huc.setRequestMethod("HEAD"); 

Znowu zamiast sprawdzenie czy stan odpowiedź nie jest 400, należy sprawdzić, czy jest 200. To jest czek na pozytywne zamiast negatywne. 404 403 402 .. wszystkie 40-krotne statusy są prawie równoważne z nieważnym nieistniejącym adresem URL.

Możesz użyć wielowątkowości, aby było jeszcze szybciej.

+0

Szybkie pytanie dotyczące tej metody - czy można w ten sposób zmienić stronę odsyłającą lub użytkownika? – Matt9Atkins

+0

do ustawiania agenta użytkownika huc.setRequestProperty ("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.5 (KHTML, jak Gecko) Chrome/4.0.249.0 Safari/532,5 "); możesz ustawić stronę wywołującą za pomocą metody setRequestProperty(). –

+0

, aby ustawić klienta użytkownika: huc.setRequestProperty ("User-Agent", "Twój program użytkownika") –

0

Wygląda na to, że możesz ustawić właściwość limitu czasu, upewnij się, że jest akceptowalna. A jeśli masz wiele adresów URL do przetestowania, wykonaj je równolegle, będzie to znacznie szybsze. Mam nadzieję, że to będzie pomocne.

1

Spróbuj zadać kolejnego serwera 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(); 
     } 
    } 
} 
+0

To nie działa dla adresu URL, który ma ścieżkę po nazwie domeny. –

Powiązane problemy