2013-06-03 155 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