62 votes

Utilisation sécurisée de HttpURLConnection

Lors de l'utilisation de HttpURLConnection, le InputStream doit-il être fermé si nous ne l'obtenons pas et ne l'utilisons pas ?

c'est-à-dire est-ce sûr?

 HttpURLConnection conn = (HttpURLConnection) uri.getURI().toURL().openConnection();
conn.connect();
// check for content type I don't care about
if (conn.getContentType.equals("image/gif") return; 
// get stream and read from it
InputStream is = conn.getInputStream();
try {
    // read from is
} finally {
    is.close();
}

Deuxièmement, est-il sûr de fermer un InputStream avant que tout son contenu n'ait été entièrement lu ?

Y a-t-il un risque de laisser le socket sous-jacent dans l'état ESTABLISHED ou même CLOSE_WAIT ?

2voto

Vlad Lifliand Points 164

Vous devez également fermer le flux d'erreurs si la requête HTTP échoue (tout sauf 200) :

 try {
  ...
}
catch (IOException e) {
  connection.getErrorStream().close();
}

Si vous ne le faites pas, toutes les requêtes qui ne renvoient pas 200 (par exemple le délai d'attente) perdront un socket.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X