HttpsURLConnection:连接超时错误

我有一个简单的代码,用于设置与谷歌的https连接并打印获得的响应。

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.(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) 

任何人都可以指导我。 从早上起我就一直在吃脑袋。

由于超时不是预期的行为,即使在发送格式错误的请求时,也无法确切地说出错误是什么。 这是我用来调试的一般过程。

脚步

执行HTTP GET时,不应尝试写入流。 您应该从输入流中读取:

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

要么省略conn.setDoOutput(true);conn.setRequestMethod("GET"); 因为这两个陈述是矛盾的。 GET不允许输出和输出另一方意味着您不能使用GET作为请求方法。

您似乎正在尝试从HTTPS协议的SSL层获取证书。 为此,您不需要发送anythig(因此不需要doOutput)。 相反,您想要获取的信息将作为HttpsURLConnection的连接建立代码内部的SSL握手的一部分发送给您,而SSLSocket是其中的一部分。

这将有助于您完成以下任务: http : //www.xinotes.org/notes/note/1088/

我有同样的问题。 当我关闭我的Antivirut时,我解决了这个问题:)。

如果您在代理服务器后面并且遇到此exception,那么此解决方案将适合您。

 public class SendCertReq { public static void main(String[] args) throws Exception { URL url = new URL("https://www.google.co.in/"); //Remember to Add proxy IP Address where 192.168.0.1 is my Proxy Address and Port is 8080. // Change as per your proxy setting Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("192.168.0.1", 8080)); HttpsURLConnection conn = (HttpsURLConnection)url.openConnection(proxy); conn.setRequestMethod("GET"); conn.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.close(); System.out.println(conn.getResponseMessage()); } } 
Interesting Posts