2013-06-03 154 views
3

我有一個簡單的代碼來建立一個https連接到谷歌和打印獲得的響應。HttpsURLConnection:連接超時錯誤

import java.io.OutputStreamWriter; 
import java.net.URL; 

import javax.net.ssl.HttpsURLConnection; 


public class SendCertReq 
{ 
public static void main(String[] args) throws Exception 
{ 
    URL url = new URL("https://www.google.co.in/"); 
    HttpsURLConnection conn = (HttpsURLConnection)url.openConnection(); 
    conn.setRequestMethod("GET"); 
    conn.setDoOutput(true); 
    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
    wr.close(); 
    System.out.println(conn.getResponseMessage()); 
} 
} 

當我嘗試運行它時,出現以下錯誤。

Exception in thread "main" java.net.ConnectException: Connection timed out: connect 
at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) 
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
at java.net.PlainSocketImpl.connect(Unknown Source) 
at java.net.SocksSocketImpl.connect(Unknown Source) 
at java.net.Socket.connect(Unknown Source) 
at sun.security.ssl.SSLSocketImpl.connect(Unknown Source) 
at sun.security.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.http.HttpURLConnection.getOutputStream(Unknown Source) 
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(Unknown Source) 
at SendCertReq.main(SendCertReq.java:16) 

任何人都可以請指導我。自從早上試圖弄清楚我一直在吃我的頭。

+2

檢查您的防火牆設置,用於'java'和'javaw'進程。你能telnet到同一站點上的443端口嗎? –

+0

完成後,您應該關閉連接。 – monika

+1

Zeutheus:在命令提示符下使用telnet進行連接測試:telnet www.google.co.in 443 –

回答

11

沒有辦法知道到底什麼是錯誤的,因爲超時未預期的行爲,發送畸形請求時,你的方式也是如此。然而,這是我用來調試的一般程序。

Steps

+0

圖片說得好...謝謝。 –

2

當您執行HTTP GET時,您不應該嘗試將寫入。你應該從輸入流,而不是閱讀:

BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream())); 
String line = null; 
while((line = reader.readLine()) != null) { 
    //........ 
} 
+0

是的,但即使這樣也不應該超時。 –

+0

原來這段代碼在我的家庭工作得很好...可能是我的工作網絡的一些問題..謝謝你們btw – DanMatlin

2

要麼離開了conn.setDoOutput(true);conn.setRequestMethod("GET");因爲這兩個語句矛盾。 GET不允許在另一端輸出和輸出,這意味着你不能使用GET作爲請求方法。

看起來您正嘗試從HTTPS協議的SSL層獲取證書。爲此,您不需要發送任何事件(因此不需要doOutput)。相反,您希望獲取的信息作爲HttpsURLConnection的連接建立代碼內部的SSL握手的一部分以及作爲其一部分的SSLSocket發送給您。

這將幫助你做你所追求的:http://www.xinotes.org/notes/note/1088/

0

我有同樣的問題。當我關閉我的Antivirut時,我解決了這個問題:)。

+0

它工作嗎?我的意思是,這不是一個很好的答案,但是如果Antivirus是造成這種情況的原因,那麼知道這一點很重要。 – Geoff