HttpsURLConnection: перавышаны час чакання злучэння Памылка

У мяне ёсць просты код для ўстанаўлення злучэння па пратаколе HTTPS, каб Google і друк адказу, атрыманага.

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)

Можа хто-небудзь, калі ласка, кіраўніцтва мяне. Я еў маю галаву з раніцы, спрабуючы зразумець гэта.

3
падлучэння да SSL звычайна патрабуецца сертыфікат, вы ўпэўненыя, што гэта не ўмова ў гэтым выпадку?
дададзена аўтар D D, крыніца
Праверце налады брандмаўэра для Java і javaw працэсы. Вы можаце телнет на порт 443 на тым жа месцы?
дададзена аўтар Anirudh Ramanathan, крыніца
Zeutheus: зрабіць тэст злучэння з дапамогай Telnet, як гэта, у камандным радку: телнет www.google.co.in 443
дададзена аўтар Daniel S., крыніца
Zeutheus: зрабіць тэст злучэння з дапамогай Telnet, як гэта, у камандным радку: телнет www.google.co.in 443
дададзена аўтар Daniel S., крыніца
Любая дапамога, калі ласка?
дададзена аўтар DanMatlin, крыніца
Любая дапамога, калі ласка?
дададзена аўтар DanMatlin, крыніца
я атрымліваю наступнае паведамленне пра памылку для телнет: Падключэнне да www.google.co.in ... Не атрымалася адкрыць падключэнне да вузла, на порт 443: Збой падключэння
дададзена аўтар DanMatlin, крыніца
я атрымліваю наступнае паведамленне пра памылку для телнет: Падключэнне да www.google.co.in ... Не атрымалася адкрыць падключэнне да вузла, на порт 443: Збой падключэння
дададзена аўтар DanMatlin, крыніца
Вы павінны закрыць злучэнне, як толькі вы зрабілі з ім.
дададзена аўтар monika, крыніца
Вы павінны закрыць злучэнне, як толькі вы зрабілі з ім.
дададзена аўтар monika, крыніца

9 адказы

Там няма ніякага спосабу, каб дакладна сказаць, што гэта няправільна, так як час чаканні не чаканае паводзіны, нават пры адпраўцы няправільнага запыту, то, як вы. Гэта агульная працэдура я выкарыстоўваю для адладкі, аднак.

Steps

11
дададзена
Малюнак кажа добра ... Дзякуй.
дададзена аўтар Arun B Chandrasekaran, крыніца

Там няма ніякага спосабу, каб дакладна сказаць, што гэта няправільна, так як час чаканні не чаканае паводзіны, нават пры адпраўцы няправільнага запыту, то, як вы. Гэта агульная працэдура я выкарыстоўваю для адладкі, аднак.

Steps

11
дададзена
Малюнак кажа добра ... Дзякуй.
дададзена аўтар Arun B Chandrasekaran, крыніца

Вы не павінны спрабаваць запісы ў патоку, калі вы выконваеце HTTP GET. Вы павінны прачытаць з уваходнага патоку замест:

BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String line = null;
while((line = reader.readLine()) != null) {
   //........
}
2
дададзена
Праўда, але гэта не павінна таймаўт.
дададзена аўтар Anirudh Ramanathan, крыніца
Аказваецца, гэты код выдатна працуе ў маім доме ... можа быць нейкае пытанне з маёй працоўнай сеткі .. дзякуй, хлопцы BTW
дададзена аўтар DanMatlin, крыніца

Вы не павінны спрабаваць запісы ў патоку, калі вы выконваеце HTTP GET. Вы павінны прачытаць з уваходнага патоку замест:

BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String line = null;
while((line = reader.readLine()) != null) {
   //........
}
2
дададзена
Праўда, але гэта не павінна таймаўт.
дададзена аўтар Anirudh Ramanathan, крыніца
Аказваецца, гэты код выдатна працуе ў маім доме ... можа быць нейкае пытанне з маёй працоўнай сеткі .. дзякуй, хлопцы BTW
дададзена аўтар DanMatlin, крыніца

Альбо пакінуць з conn.setDoOutput (ісціна); або conn.setRequestMethod ( "GET"); , таму што гэтыя два зацвярджэння супярэчаць. GET не дазваляе выхад і выхад на другім баку азначае, што вы не можаце выкарыстоўваць GET ў якасці метаду запыту.

Падобна на тое, што вы спрабуеце атрымаць сертыфікат ад SSL пласта пратаколу HTTPS. Для гэтага вам не трэба адпраўляць нічога рабіць дадаткова (адсюль doOutput не патрабуецца). Замест гэтага, інфармацыя, якую вы хочаце атрымаць дасылаецца вам як частка SSL поціску рукі ўнутры злучэння, які ўстанаўлівае код HttpsURLConnection, і SSLSocket, які з'яўляецца часткай гэтага.

This will help you do what you are after: http://www.xinotes.org/notes/note/1088/

2
дададзена

Альбо пакінуць з conn.setDoOutput (ісціна); або conn.setRequestMethod ( "GET"); , таму што гэтыя два зацвярджэння супярэчаць. GET не дазваляе выхад і выхад на другім баку азначае, што вы не можаце выкарыстоўваць GET ў якасці метаду запыту.

Падобна на тое, што вы спрабуеце атрымаць сертыфікат ад SSL пласта пратаколу HTTPS. Для гэтага вам не трэба адпраўляць нічога рабіць дадаткова (адсюль doOutput не патрабуецца). Замест гэтага, інфармацыя, якую вы хочаце атрымаць дасылаецца вам як частка SSL поціску рукі ўнутры злучэння, які ўстанаўлівае код HttpsURLConnection, і SSLSocket, які з'яўляецца часткай гэтага.

This will help you do what you are after: http://www.xinotes.org/notes/note/1088/

2
дададзена

У мяне тыя ж праблемы. Калі я выключаю Antivirut, я магу вырашыць гэтую праблему :).

0
дададзена
Гэта працуе? Я маю на ўвазе, гэта не вялікі адказ, але калі антывірус гэта тое, што прычына гэтага, было б выдатна ведаць.
дададзена аўтар Geoff, крыніца

У мяне тыя ж праблемы. Калі я выключаю Antivirut, я магу вырашыць гэтую праблему :).

0
дададзена
Гэта працуе? Я маю на ўвазе, гэта не вялікі адказ, але калі антывірус гэта тое, што прычына гэтага, было б выдатна ведаць.
дададзена аўтар Geoff, крыніца

<�Моцны> Калі вы знаходзіцеся за проксі і сутыкаўся з гэтай 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());
     }
}
0
дададзена