我有一个简单的代码,用于设置与谷歌的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.<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)
任何人都可以指导我。从早上起我就一直在吃脑袋。
答案 0 :(得分:12)
由于超时不是预期的行为,即使发送格式错误的请求,也没有办法确切地说出错误是什么。这是我用来调试的一般过程。
答案 1 :(得分:2)
执行HTTP GET时,不应尝试将写入流。您应该从输入流中读取:
BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String line = null;
while((line = reader.readLine()) != null) {
//........
}
答案 2 :(得分:2)
要么忽略conn.setDoOutput(true);
或conn.setRequestMethod("GET");
,因为这两个陈述是矛盾的。 GET不允许输出和输出另一方意味着您不能使用GET作为请求方法。
您似乎正在尝试从HTTPS协议的SSL层获取证书。为此,您不需要发送anythig(因此不需要doOutput)。相反,您想要获取的信息将作为HttpsURLConnection的连接建立代码内的SSL握手的一部分发送给您,而SSLSocket也是此之一。
这将帮助您完成所需目标:http://www.xinotes.org/notes/note/1088/
答案 3 :(得分:0)
我有同样的问题。当我关闭我的防病毒软件时,我解决了这个问题:)。
答案 4 :(得分:0)
如果您支持代理并且遇到此异常,则此解决方案将适用于您。
{{1}}