2013-04-24 74 views
5

Tôi đang cố gắng tạo một tiện ích trên trang web với java, nhưng tôi có một số vấn đề.Kiểm tra xem trang web có tồn tại

Có cách nào để kiểm tra xem trang web có tồn tại không? Tôi cố gắng này để xem một trang web là xuống:

URL url = new URL("http://localhost"); 
HttpURLConnection httpConnection = (HttpURLConnection) (url.openConnection()); 
int code = httpConnection.getResponseCode(); 
System.out.println("code: " + code); 

Nó đi qua IOException cho Connection refused: connect khi ví dụ: tôi cố gắng để kết nối với localhost trong khi không có máy chủ http tích cực lắng nghe (trang web là xuống).

Tôi nghĩ rằng nó sẽ xảy ra điều tương tự với một số trang web mà thực sự không tồn tại tức là

URL url = new URL("http://www.sdfasfjkhaslfjkhaslkdjfhasldkjf.it"); 

Nhưng tôi nhận được một mã HTTP Status 200 vì ISP của tôi tự động chuyển hướng tôi đến một trang quảng cáo ngẫu nhiên nếu trang web tôi đang tìm kiếm không tồn tại. Vì vậy, nếu một trang web bị hỏng, chương trình của tôi nói "Vâng, trang web của bạn bị ngừng hoạt động", nhưng nếu trang web không tồn tại chương trình của tôi nói "Ồ, trang web của bạn đã hoạt động!", Và đó không phải là thật sự tốt.

Có cách nào để kiểm tra xem trang web có tồn tại không?

+6

Wow, thật là một ISP xấu. – eboix

+0

@eboix Yeah. Thật không may, tôi nghĩ rằng mỗi ISP ý hoạt động như thế này – BackSlash

+0

Nếu ISP của bạn chuyển hướng bạn như thế này, bạn cũng có thể giả định nó không có sẵn. –

Trả lời

1

Đọc nhận xét của bạn về ngộ độc DNS ISP. ISP của bạn đang cho thuê/cho thuê máy chủ DNS mà họ kiểm soát để bắt tất cả các phản hồi NXDOMAIN và trả lại kết quả bị nhiễm độc đến máy chủ mà họ kiểm soát.

Tôi sẽ thực hiện kiểm tra DNS cho bản ghi A có thứ gì đó như Google Public DNS hoặc một số máy chủ DNS hợp lệ đã được công khai khác trước khi bạn thực hiện kiểm tra HTTP. Google Public DNS không trả lại NXDOMAIN khi tên miền không hợp lệ. Trong Java, bạn có thể cần sử dụng một cái gì đó như dnsjava để truy cập trực tiếp vào các bản ghi DNS mà bạn cần.

Cuối cùng, thực hiện hai lần kiểm tra, một bản ghi DNS hợp lệ đối với một nguồn tốt đã biết, sau đó một bản kiểm tra khác để xem liệu HTTP có còn hoạt động hay không.

+1

Tôi làm cách nào để kiểm tra các DNS của Google mà không cần cài đặt chúng? Tôi không thể yêu cầu người dùng ứng dụng thay đổi cài đặt DNS của mình, có cách nào để "hỏi" họ không nếu trang web được giải quyết mà không đặt chúng làm DNS mặc định? – BackSlash

+0

Bạn sẽ không thay đổi máy chủ DNS của người dùng cuối. Bạn đã đặt máy chủ DNS trong ứng dụng của mình để thực hiện tra cứu. Nếu bạn mở một dấu nhắc lệnh/kiểu phiên đầu cuối 'nslookup kjfksadljfksl.com' thì gõ' nslookup kjfksadljfksl.com 8.8.8.8'. Bạn đang nói 'nslookup' để thực hiện tra cứu chống lại Google và không chống lại các máy chủ DNS của ISP của bạn. Bạn sẽ làm một điều tương tự trong mã của bạn. –

+0

'nslookup kjfksadljfksl.com 8.8.8.8' có nghĩa là tôi phải thực hiện các lệnh đầu cuối từ ứng dụng java của tôi, sẽ tốt hơn nếu tôi không ... Tôi sẽ thử dnsjava, có thể nó giải quyết mọi vấn đề của tôi! – BackSlash

1

Chỉ cần tìm thấy Java - How to find the redirected url of a url? đề xuất thiết lập httpConnection.setFollowRedirects (sai) - điều đó có thể giúp ích nếu chúng đang thực sự chuyển hướng. Nếu họ không chuyển hướng nhưng chỉ phục vụ nội dung của riêng họ không chắc chắn có nhiều việc phải làm ngoại trừ việc phát hiện xem nội dung có phải là nội dung bạn mong đợi hay không hoặc là quảng cáo.

0

Bạn có thể muốn thêm:

HttpURLConnection.setFollowRedirects(false); 
// note : or 
//  httpConnection.setInstanceFollowRedirects(false); 

và kiểm soát:

(httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) 
Các vấn đề liên quan