2013-08-08 22 views
17

Merhaba Birçok farklı URL'den geçen ve var olup olmadığını kontrol eden bir program yazıyorum. Temel olarak, hata kodunun 404 olup olmadığını kontrol ediyorum. Ancak 1000'den fazla URL'yi kontrol ettiğim için bunu çok hızlı bir şekilde yapmak istiyorum. Aşağıdaki kodum, ben (mümkünse) hızlı çalışması için değiştirebilirsiniz merak ediyorum edilir:Java - URL'nin mevcut olup olmadığını kontrol etmenin en hızlı yolu

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

o JSoup kullanmak daha hızlı olurdu?

Bazı sitelerin kod 200 verdiğini ve kendi hata sayfalarının olduğunu biliyorum, ancak denetlediğim bağlantılar bunu yapmaz biliyorum, bu gerekli değildir.

cevap

28

bir "BAŞ" isteği göndermeyi deneyin yerine isteği olsun sonraki DNS Sunucusu sormak. Yanıt gövdesi indirilmediği için bu daha hızlı olmalıdır.

huc.setRequestMethod("HEAD"); 

Yine yerine check pozitif yerine negatif içindir 200 ise yanıt durumu 400 değilse kontrol ederek kontrol edin. 404,403,402 .. tüm 40x durumları, geçersiz olan non-existant URL'ye neredeyse eşdeğerdir.

Çok daha hızlı işlem yapmak için çok iş parçacığı kullanabilirsiniz.

+0

Bu yöntemle ilgili hızlı soru - Yönlendiren veya kullanıcı aracısını bu yolla değiştirmek mümkün mü? – Matt9Atkins

+0

kullanıcı aracısını ayarlamak için huc.setRequestProperty ("Kullanıcı Aracı", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; tr-ABD) AppleWebKit/532.5 (Gecko gibi KHTML) Chrome/4.0.249.0 Safari/532,5"); yönlendiriciyi setRequestProperty() yöntemini kullanarak da ayarlayabilirsiniz. Kullanıcı aracısını ayarlamak için –

+0

: huc.setRequestProperty ("Kullanıcı Aracısı", "Kullanıcı aracınız") –

0

Zaman aşımı özelliğini ayarlayabildiğinizden, kabul edilebilir olduğundan emin olun. Ve eğer test etmek için çok fazla urliniz varsa, bunları paralel yapın, çok daha hızlı olacaktır. Umarım bu yardımcı olacaktır.

1

deneyin

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

Bu, alan adından sonra bir yolu olan bir URL için çalışmaz. –

İlgili konular