2013-08-08 41 views
17

Xin chào Tôi đang viết một chương trình trải qua nhiều URL khác nhau và chỉ kiểm tra xem chúng có tồn tại hay không. Tôi về cơ bản kiểm tra xem mã lỗi có trả lại là 404 hay không. Tuy nhiên, khi tôi kiểm tra hơn 1000 URL, tôi muốn có thể thực hiện điều này rất nhanh chóng. Sau đây là mã của tôi, tôi đã tự hỏi làm thế nào tôi có thể sửa đổi nó để hoạt động một cách nhanh chóng (nếu có thể):Java - Cách nhanh nhất để kiểm tra xem URL có tồn tại không?

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

Sử dụng JSoup có nhanh hơn không?

Tôi biết một số trang web cung cấp mã 200 và có trang lỗi riêng của họ, tuy nhiên tôi biết các liên kết mà tôi đang kiểm tra không làm điều này, vì vậy điều này là không cần thiết.

Trả lời

28

Hãy thử gửi một "HEAD" yêu cầu thay vì được yêu cầu. Điều đó sẽ nhanh hơn vì cơ thể phản hồi không được tải xuống.

huc.setRequestMethod("HEAD"); 

Một lần nữa thay vì kiểm tra nếu tình trạng phản ứng không phải là 400, kiểm tra xem nó là 200. Đó là séc trị giá tích cực thay vì tiêu cực. 404,403,402 .. tất cả trạng thái 40x gần tương đương với url không tồn tại không hợp lệ.

Bạn có thể sử dụng tính năng đa luồng để làm cho việc này trở nên nhanh hơn.

+0

Câu hỏi nhanh về phương pháp này - Có thể thay đổi liên kết giới thiệu hoặc tác nhân người dùng bằng cách này không? – Matt9Atkins

+0

để đặt tác nhân người dùng huc.setRequestProperty ("Tác nhân người dùng", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.5 (KHTML, như Gecko) Chrome/4.0.249.0 Safari/532,5 "); bạn cũng có thể đặt liên kết giới thiệu bằng phương thức setRequestProperty(). –

+0

để đặt tác nhân người dùng: huc.setRequestProperty ("Tác nhân người dùng", "Tác nhân người dùng của bạn") –

0

Dường như bạn có thể đặt thuộc tính thời gian chờ, đảm bảo rằng nó có thể chấp nhận được. Và nếu bạn có nhiều url để kiểm tra, hãy làm điều đó song song, nó sẽ nhanh hơn nhiều. Hy vọng điều này sẽ hữu ích.

1

Cố gắng hỏi các DNS Server tiếp theo

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

Điều này không hoạt động đối với URL có đường dẫn sau tên miền. –

Các vấn đề liên quan