通过HttpsUrlConnection访问时获取超时异常

时间:2014-02-06 10:24:12

标签: java spring spring-mvc https httpsurlconnection

我正在尝试使用Java代码访问某个网站(例如https://www.yahoo.com) Eclipse IDE,但我收到连接超时异常。

  

我还检查过eclipse能够连接到互联网,同样的网站在eclipse内部浏览器中甚至在Chrome中也能正常运行。

代码如下:

public static void main(String[] args) throws Exception {

    SSLContext sslctx = SSLContext.getInstance("SSL");
    sslctx.init(null, new X509TrustManager[] { new MyTrustManager() }, null);
    HttpsURLConnection.setDefaultSSLSocketFactory(sslctx.getSocketFactory());
    HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {

        @Override
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    });

    URL url = new URL("https://www.yahoo.com"); 
    HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
    con.setRequestMethod("GET");
    con.connect(); //getting exception here
    if (con.getResponseCode() == HttpsURLConnection.HTTP_OK) {
        BufferedReader br = new BufferedReader(new InputStreamReader(
                con.getInputStream()));
        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
        br.close();
    } else{
        System.out.println("Not able to connect");
    }
    con.disconnect();

}

实现X509TrustManager的MyTrustManager类

class MyTrustManager implements X509TrustManager {
public void checkClientTrusted(X509Certificate[] chain, String authType) {
}

public void checkServerTrusted(X509Certificate[] chain, String authType) {
}

public X509Certificate[] getAcceptedIssuers() {
    return new X509Certificate[0];
}

}

  

运行此代码后,应用程序正在等待几秒钟,然后抛出以下异常。

Exception in thread "main" java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(Unknown Source)
at com.sun.net.ssl.internal.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.https.HttpsURLConnectionImpl.connect(Unknown Source)
at com.saf.server.Test3.main(Test3.java:31)
  

请帮我找出错误的地方!!!

0 个答案:

没有答案