In Java löst dieser Code eine Ausnahme aus, wenn das HTTP-Ergebnis im Bereich 404 liegt:
URL url = new URL("http://stackoverflow.com/asdf404notfound");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.getInputStream(); // throws!
In meinem Fall weiß ich zufällig, dass der Inhalt 404 ist, aber ich möchte trotzdem den Text der Antwort lesen.
(In meinem tatsächlichen Fall lautet der Antwortcode 403, aber der Hauptteil der Antwort erklärt den Grund für die Ablehnung, und ich möchte dies dem Benutzer anzeigen.)
Wie kann ich auf den Antworttext zugreifen?
java
http
httpurlconnection
Dan Fabulich
quelle
quelle
Antworten:
Hier ist der Fehlerbericht (schließen, nicht beheben, kein Fehler).
Ihr Rat dort ist, wie folgt zu codieren:
quelle
httpConn.getResponseCode() >= 400
(und ihre Problemumgehung hat einen Fehler, der die zu verwendenden Eingabestreams umdreht)Es ist das gleiche Problem, das ich hatte:
HttpUrlConnection
Gibt zurück,FileNotFoundException
wenn Sie versuchen, dasgetInputStream()
von der Verbindung zu lesen .Sie sollten stattdessen verwenden,
getErrorStream()
wenn der Statuscode höher als 400 ist.Seien Sie darüber hinaus vorsichtig, da nicht nur 200 der Erfolgsstatuscode sind, sondern auch 201, 204 usw. häufig als Erfolgsstatus verwendet werden.
Hier ist ein Beispiel, wie ich es geschafft habe
Auf diese Weise erhalten Sie sowohl in Erfolgs- als auch in Fehlerfällen die erforderliche Antwort.
Hoffe das hilft!
quelle
In .Net haben Sie die Response-Eigenschaft der WebException, die den Zugriff auf den Stream bei einer Ausnahme ermöglicht. Ich denke, das ist ein guter Weg für Java, ...
Oder eine Implementierung, die ich verwendet habe. (Möglicherweise sind Änderungen für die Codierung oder andere Dinge erforderlich. Funktioniert in der aktuellen Umgebung.)
quelle
Ich weiß, dass dies die Frage nicht direkt beantwortet, aber anstatt die von Sun bereitgestellte HTTP-Verbindungsbibliothek zu verwenden, sollten Sie sich Commons HttpClient ansehen , das (meiner Meinung nach) eine weitaus einfachere API bietet.
quelle
Überprüfen Sie zuerst den Antwortcode und verwenden Sie dann
HttpURLConnection.getErrorStream()
quelle
quelle
if (httpConn.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
Mein laufender Code.
quelle
So lesen Sie den 404-Antworttext in Java:
Verwenden Sie die Apache-Bibliothek - https://hc.apache.org/httpcomponents-client-4.5.x/httpclient/apidocs/
oder Java 11 - https://docs.oracle.com/de/java/javase/11/docs/api/java.net.http/java/net/http/HttpClient.html
Das unten angegebene Snippet verwendet Apache:
quelle