2013-04-24 5 views
5

java로 웹 사이트 다운 유틸리티를 만들려고하는데 문제가 있습니다.웹 사이트가 있는지 확인하십시오.

웹 사이트가 있는지 확인하는 방법이 있습니까? 내가 듣고 활성 HTTP 서버 (사이트가 다운)가없는 상태 localhost에 연결하려고 할 때 즉 그것은 Connection refused: connect에 대한 IOException 통과

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

: 나는 웹 사이트가 다운 있는지 확인하기 위해이 시도.

나는 실제로 즉

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

존재하지 않는 일부 사이트와 같은 일이 일어날 것이라고 생각하지만 내 ISP가 자동으로 경우 임의의 광고 페이지로 저를 리디렉션 때문에 나는 HTTP 상태 코드 (200)를 수신 내가 찾고있는 사이트가 존재하지 않습니다.

사이트가 다운 된 경우 내 프로그램에 "글쎄, 웹 사이트가 다운되었습니다"라고 표시되지만 사이트가 존재하지 않으면 내 프로그램에 "아, 웹 사이트가 실행 중입니다!"라고 표시됩니다. 정말 좋다.

웹 사이트가 있는지 확인하는 방법이 있습니까?

+6

와우, 어떤 나쁜 ISP를. – eboix

+0

@eboix 예. 불행히도, 나는 모든 이탈리아 ISP가 다음과 같이 작동한다고 생각한다. – BackSlash

+0

ISP가 당신을 리디렉션하면 이것을 사용할 수 없다고 가정 할 수도있다. –

답변

1

ISP DNS 중독에 대한 의견을 읽습니다. 귀하의 ISP는 귀하가 제어하고있는 DNS 서버에 모든 NXDOMAIN 응답을 포착하고 제어하는 ​​서버에 중독 된 결과를 반환합니다.

HTTP 검사를 수행하기 전에 Google Public DNS 또는 다른 공개적으로 알려진 유효한 DNS 서버와 같은 A 레코드에 대해 DNS 검사를 수행합니다. Google 공용 DNS는 도메인이 유효하지 않은 경우 NXDOMAIN을 반환합니다. Java에서 필요한 DNS 레코드에 직접 액세스하려면 dnsjava과 같은 것을 사용해야 할 수도 있습니다.

마지막으로 두 개의 검사를 수행합니다. 하나는 알려진 올바른 원본에 대한 유효한 DNS 레코드이고 다른 하나는 HTTP가 살아 있는지 확인하는 것입니다.

+1

Google DNSes를 설정하지 않고 어떻게 확인할 수 있습니까? 응용 프로그램 사용자에게 DNS 설정을 변경하도록 요청할 수는 없지만 웹 사이트가 기본 DNSes로 설정되지 않은 상태에서 해결되는 경우 "요청"할 수 있습니까? – BackSlash

+0

최종 사용자의 DNS 서버를 변경하지 마십시오. 조회를 수행하려면 응용 프로그램의 DNS 서버를 설정하십시오. 명령 프롬프트/터미널 세션 유형'nslookup kjfksadljfksl.com'을 열면'nslookup kjfksadljfksl.com 8.8.8.8'을 입력하십시오. 당신은'nslookup '에게 ISP에 대한 DNS 서버가 아닌 Google에 대한 조회를 수행한다고 말하고 있습니다. 당신은 당신의 코드에서 비슷한 것을 할 것입니다. –

+0

'nslookup kjfksadljfksl.com 8.8.8.8'은 내 Java 응용 프로그램에서 터미널 명령을 실행해야한다는 것을 의미합니다. 그렇지 않으면 더 좋을 것입니다 ... dnsjava를 시도해 볼 것입니다. 아마도 모든 문제를 해결할 것입니다! – BackSlash

1

실제로는 httpConnection.setFollowRedirects (false) 설정을 제안하는 Java - How to find the redirected url of a url?이 실제로 리다이렉션을 수행하는 데 도움이 될 수 있습니다. 그들이 리디렉션하지 않고 자신의 콘텐츠를 제공하는 경우 콘텐츠가 예상 한 것인지 아니면 광고하는지 여부 만 확인하면됩니다.

0

당신은 추가 할 수 있습니다 :

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

및 제어 :

(httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) 
관련 문제