[Java 1.5; Eclipse Galileo]HttpsURLConnection se bloque lorsque getInputStream() est appelé
HttpsURLConnection semble se bloquer lorsque la méthode getInputStream() est appelée. J'ai essayé d'utiliser différents sites Web en vain (actuellement https://www.google.com). Je dois souligner que j'utilise http S.
Le code ci-dessous a été modifié en fonction de ce que j'ai appris des autres réponses de StackOverflow. Cependant, aucune des solutions que j'ai essayées jusqu'ici n'a fonctionné.
Je serais très reconnaissant pour un coup de coude dans la bonne direction :)
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();
}
erreurs typiques ressemblent:
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)
Juste un coup de poignard dans le noir, vous envoyez une requête POST, donc je suppose que l'autre extrémité (Google) vous attend d'envoyer certains paramètres. Tout ce que vous envoyez est des en-têtes HTTP. Que se passe-t-il lorsque vous modifiez POST à un GET? – beny23
Que faites-vous/vraiment/que vous essayez de faire? Votre balise gmail me porte à soupçonner que vous pourriez être mieux avec POP, IMAP, ou SMTP (ou l'une des API personnalisées de Google) –