2013-06-03 4 views
3

Google에 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' 프로세스를 확인하십시오. 같은 사이트에서 443 번 포트로 텔넷 할 수 있습니까? –

+0

작업이 끝나면 연결을 닫아야합니다. – monika

+1

Zeutheus : 명령 프롬프트에서 다음과 같이 텔넷을 사용하여 연결 테스트를 수행하십시오. 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 계층에서 인증서를 가져 오는 중입니다. 이를 위해 anythig를 보낼 필요가 없습니다 (따라서 doOutput은 필요하지 않습니다). 대신, 얻고 자하는 정보는 HttpsURLConnection의 연결 설정 코드 내부에있는 SSL 핸드 쉐이크의 일부로 보내지고이 부분의 SSLSocket입니다.

은 당신이 도움이 될 것입니다 당신이 후에 무엇 : http://www.xinotes.org/notes/note/1088/

0

나는 같은 문제가있다. 내 Antivirut를 끄면이 문제가 해결됩니다. :)

+0

작동합니까? 내 말은, 좋은 대답은 아니지만, 안티 바이러스가이 문제를 일으키는 것이라면, 알아두면 좋을 것입니다. – Geoff