2013-08-23 5 views
1

URL을 기록하고 상태 코드 (예 : 200, 404 등)를 인쇄하는 자바 프로그램을 작성하고 싶습니다. HttpUrlConnection API를 사용하여이 작업을 수행하고 있지만 예외 만 표시하고 상태 코드는 인쇄하지 않습니다. 해당 URL에 도달 할 수있는 경우에만URL에서 http 응답 코드를 받으십시오.

URL url = new URL("https://abc.com/test.html"); 
HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
connection.setRequestMethod("GET"); 
connection.connect(); 

int code = connection.getResponseCode(); 
System.out.println("code: "+code); 
+1

그러나 예외 만 표시합니다. 그 예외는 무엇입니까? –

+0

연결 시간이 초과되었습니다. – anonymous

+1

연결 시간 초과가 HTTP 응답 코드가 아닙니다. 전혀 응답이 없었습니다. – Thilo

답변

3

을하고 나를 위해 잘 작동 : 구글과도

import java.net.*; 

public class Action 
{ 

    public static void main(String[] args) 
    { 
     try 
     { 
      URL url = new URL("http://localhost:8888"); 
      HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
      connection.setRequestMethod("GET"); 
      connection.connect(); 

      int code = connection.getResponseCode(); 
      System.out.println("code: "+code); 
     } 
     catch(Exception e) 
     { 

     } 

    } 
} 


을 .

1

당신은 URL에서 응답 코드를 얻을 것이다. 귀하의 코드에서 당신은 존재하지 않는 URL을 사용하고있는 것 같아서 도달 할 수없는 호스트 예외를 얻고 있어야합니다.

봅니다 유효한 URL에 도달 응답 코드 확인 : 나는 다음과 같은 코드를 시도

URL url = new URL("https://google.com"); 
0
URL url = new URL("https://www.google.com"); 
HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
connection.setRequestMethod("GET"); 
connection.connect(); 

int code = connection.getResponseCode(); 
System.out.println("code: "+code); 

사용중인 URL이 유효하지 않으므로 다른 url을 사용해보세요. 'https://abc.com/test.html'- 해당 페이지가 없으므로 예외가 발생합니다. 유효한 URL을 시도하고 잘 작동합니다.

0

심지어 같은 예외가 발생합니다. java.net.ConnectException : 연결 시간이 초과되었습니다 : 프록시에 & 포트를 코드에 추가하지 않으면 연결하십시오.

java.net.ConnectException: Connection timed out: connect 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.PlainSocketImpl.doConnect(Unknown Source) 
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source) 
    at java.net.PlainSocketImpl.connect(Unknown Source) 
    at java.net.SocksSocketImpl.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(Unknown Source) 
    at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(Unknown Source) 
    at sun.net.NetworkClient.doConnect(Unknown Source) 
    at sun.net.www.http.HttpClient.openServer(Unknown Source) 
    at sun.net.www.http.HttpClient.openServer(Unknown Source) 
    at sun.net.www.protocol.https.HttpsClient.<init>(Unknown Source) 
    at sun.net.www.protocol.https.HttpsClient.New(Unknown Source) 
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) 
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(Unknown Source) 
    at edu.sandip.TestURLConnection.main(TestURLConnection.java:23) 

이 예외는 조직 프록시에서 조직의 코드를 실행하고 있기 때문에 발생합니다.

아래 수정 된 코드를 사용하십시오. 200 OK를 responseCode로 가져옵니다.

import java.net.HttpURLConnection; 
    import java.net.URL; 
    import java.net.URLConnection; 

    import javax.net.ssl.HttpsURLConnection; 



    public class TestURLConnection { 

     /** 
     * @param args 
     */ 
     public static void main(String[] args) { 
      try{ 
       URL url = new URL("https://www.google.com/"); 
       System.setProperty("https.proxyHost", "XXX.XXX.XXX.XX"); 
       System.setProperty("https.proxyPort", "80"); 
       HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
       //HttpsURLConnection connection = (HttpsURLConnection)url.openConnection(); 
       connection.setRequestMethod("GET"); 
       connection.connect(); 

       int code = connection.getResponseCode(); 
       System.out.println("code: "+code); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

     } 

    } 

참고 : 1. 당신은 당신의 조직 네트워크 관리자에서 proxyHost IP를 얻을 필요가있다. 2. https URL에 액세스하려면 HttpsURLConnection을 사용해야합니다.

관련 문제