2013-08-23 126 views
1

我想編寫一個Java程序,它會打一個URL並打印狀態碼(即200,404等)。我正在使用HttpUrlConnection api執行此操作,但它只顯示異常,並不顯示狀態碼。從網址獲取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 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); 

請嘗試使用其他網址,因爲您使用的網址無效。 'https://abc.com/test.html' - 不存在這樣的頁面,所以它給出異常。嘗試一個有效的網址,它會正常工作。

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.您應該使用HttpsURLConnection訪問https URL。