[Java 1.5; Eclipse Galileo]HttpsURLConnection se estanca cuando getInputStream() se llama
HttpsURLConnection parece bloquearse cuando se llama al método getInputStream(). He intentado utilizar diferentes sitios web en vano (actualmente https://www.google.com). Debo señalar que estoy usando http S.
El siguiente código se ha modificado en función de lo que he aprendido de otras respuestas de StackOverflow. Sin embargo, ninguna solución que he probado hasta ahora ha funcionado.
estaría muy agradecido por un empujón en la dirección correcta :)
public static void request(URL url, String query)
{
try{
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
//connection.setReadTimeout(5000); //<-- uncommenting this line at least allows a timeout error to be thrown
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
System.setProperty("http.keepAlive", "false");
connection.setRequestMethod("POST");
// setting headers
connection.setRequestProperty("Content-length",String.valueOf (query.length()));
connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); //WAS application/x-www- form-urlencoded
connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)");
////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
System.out.println("THIS line stalls" + connection.getInputStream());
////////////////////////////////////////////////////////////////////////////////////
}catch(Exception e) {
System.out.println(e);
e.printStackTrace();
}
errores típicos se parecen:
java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:293)
at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:331)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:782)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:739)
at com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:75)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:256)
at java.io.BufferedInputStream.read(BufferedInputStream.java:313)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:681)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:626)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:983)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)
at https_understanding.HTTPSRequest.request(HTTPSRequest.java:60)
at https_understanding.Main.main(Main.java:17)
Sólo una puñalada en la oscuridad, usted está enviando una solicitud POST, lo que podría suponer que el otro extremo (Google) está esperando para que usted envíe algunos parámetros. Todo lo que está enviando es algunos encabezados HTTP. ¿Qué sucede cuando cambias POST a GET? – beny23
¿Qué estás/realmente/tratando de hacer? Su etiqueta de Gmail me lleva a sospechar que podría estar mejor con POP, IMAP o SMTP (o una de las API personalizadas de Google) –