En Java, ce code lève une exception lorsque le résultat HTTP est la plage 404:
URL url = new URL("http://stackoverflow.com/asdf404notfound");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.getInputStream(); // throws!
Dans mon cas, je sais que le contenu est 404, mais j'aimerais quand même lire le corps de la réponse.
(Dans mon cas réel, le code de réponse est 403, mais le corps de la réponse explique la raison du rejet, et j'aimerais l'afficher à l'utilisateur.)
Comment puis-je accéder au corps de la réponse?
java
http
httpurlconnection
Dan Fabulich
la source
la source
Réponses:
Voici le rapport de bogue (fermé, ne corrigera pas, pas un bogue).
Leur conseil est de coder comme ceci:
la source
httpConn.getResponseCode() >= 400
(et leur contournement a une erreur, retournant les flux d'entrée à utiliser)C'est le même problème que j'avais:
HttpUrlConnection
retourneFileNotFoundException
si vous essayez de lire legetInputStream()
depuis la connexion.Vous devriez plutôt l'utiliser
getErrorStream()
lorsque le code d'état est supérieur à 400.De plus, soyez prudent car ce n'est pas seulement 200 pour être le code de statut de réussite, même 201, 204, etc. sont souvent utilisés comme statuts de réussite.
Voici un exemple de la façon dont je suis allé le gérer
De cette façon, vous serez en mesure d'obtenir la réponse nécessaire dans les cas de réussite et d'erreur.
J'espère que cela t'aides!
la source
Dans .Net, vous avez la propriété Response de WebException qui donne accès au flux sur une exception. Donc je suppose que c'est un bon moyen pour Java, ...
Ou une implémentation que j'ai utilisée. (Peut nécessiter des modifications pour l'encodage ou d'autres choses. Fonctionne dans l'environnement actuel.)
la source
Je sais que cela ne répond pas directement à la question, mais au lieu d'utiliser la bibliothèque de connexion HTTP fournie par Sun, vous voudrez peut-être jeter un coup d'œil à Commons HttpClient , qui (à mon avis) a une API beaucoup plus facile à utiliser .
la source
Vérifiez d'abord le code de réponse, puis utilisez
HttpURLConnection.getErrorStream()
la source
la source
if (httpConn.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
Mon code courant.
la source
Comment lire le corps de la réponse 404 en java:
Utilisez la bibliothèque Apache - https://hc.apache.org/httpcomponents-client-4.5.x/httpclient/apidocs/
ou Java 11 - https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/HttpClient.html
L'extrait de code ci-dessous utilise Apache:
la source