J'utilisais la méthode java.net.URL.openStream()
pour extraire le contenu du serveur. J'ai récemment rencontré un problème où le code de réponse HTTP indiquait une erreur, mais au lieu de lancer une exception, le flux était toujours lu. Cela a causé l'erreur d'apparaître beaucoup plus tard dans l'exécution et s'est avéré être un faux-fuyant. Autant que je puisse voir, quand vous avez ouvert un flux en utilisant cette méthode, il n'y a aucun moyen de vérifier le code de réponse HTTP.Url.openStream est-il dangereux?
La seule façon que je pouvais trouver pour gérer ce bien était d'obtenir une connexion avant ouverture du flux:
HttpURLConnection conn=(HttpURLConnection) url.openConnection()
#Code updated with scotth's suggestion
if(!String.valueOf(conn.getResponseCode()).startsWith('2'))
throw new IOException("Incorrect response code "+conn.getResponseCode()+" Message: " +getResponseMessage());
rawIn=conn.getInputStream()
InputStream in=conn.getInputStream()
ne Vous êtes d'accord? Y a-t-il de bonnes raisons d'utiliser OpenStream en toute sécurité ou de décourager son utilisation? Il est à noter que Sun utilise la méthode dans leur tutorial code for reading directly from a URL. Là encore, le code lance Exception, donc ce n'est pas exactement un bastion de bonnes pratiques de codage.