Ich weiß, dass es früher eine Möglichkeit gab, es mit Apache Commons zu bekommen, wie hier dokumentiert: http://hc.apache.org/httpclient-legacy/apidocs/org/apache/commons/httpclient/HttpMethod.html und ein Beispiel hier:
http://www.kodejava.org/examples/416.html
aber ich glaube, das ist veraltet. Gibt es eine andere Möglichkeit, eine http-Get-Anfrage in Java zu erstellen und den Antworttext als Zeichenfolge und nicht als Stream abzurufen?
java
apache-httpclient-4.x
apache-commons
Dänisch94
quelle
quelle
Antworten:
Jede Bibliothek, an die ich denken kann, gibt einen Stream zurück. Sie könnten verwenden
IOUtils.toString()
von Apache Commons IO eine zu lesen ,InputStream
in einenString
in einem Methodenaufruf. Z.B:Update: Ich habe das obige Beispiel geändert, um die Inhaltscodierung aus der Antwort zu verwenden, falls verfügbar. Andernfalls wird standardmäßig UTF-8 verwendet, anstatt die Standardeinstellung des lokalen Systems zu verwenden.
quelle
Content-Encoding
Header aus der Antwort verwendet werden sollte, falls verfügbar.Hier sind zwei Beispiele aus meinem Arbeitsprojekt.
Verwenden von
EntityUtils
undHttpEntity
Verwenden von
BasicResponseHandler
quelle
response.getEntity()
und jetzt als verfügbar istresponseString
. Wenn Sie erneut versuchen, eine response.getEntity () auszuführen, wird diese zurückgegebenIllegalStateException
.Hier ist ein Beispiel aus einem anderen einfachen Projekt, an dem ich mit der httpclient-Bibliothek von Apache gearbeitet habe:
Verwenden Sie einfach EntityUtils, um den Antworttext als String abzurufen. sehr einfach.
quelle
Dies ist im speziellen Fall relativ einfach, im allgemeinen Fall jedoch recht schwierig.
Die Antwort hängt vom
Content-Type
HTTP-Antwortheader ab .Dieser Header enthält Informationen zur Nutzlast und kann die Codierung von Textdaten definieren. Selbst wenn Sie von Texttypen ausgehen , müssen Sie möglicherweise den Inhalt selbst überprüfen, um die richtige Zeichenkodierung zu ermitteln. Weitere Informationen dazu finden Sie in der HTML 4-Spezifikation für das jeweilige Format.
Sobald die Codierung bekannt ist, kann ein InputStreamReader zum Decodieren der Daten verwendet werden.
Diese Antwort hängt davon ab, ob der Server das Richtige tut. Wenn Sie Fälle behandeln möchten, in denen die Antwortheader nicht mit dem Dokument übereinstimmen oder die Dokumentdeklarationen nicht mit der verwendeten Codierung übereinstimmen, ist dies ein weiterer Fischkessel.
quelle
Im Folgenden finden Sie eine einfache Möglichkeit, mithilfe der Apache HTTP Client-Bibliothek als Zeichenfolge auf die Antwort zuzugreifen.
quelle
Wie wäre es nur damit?
quelle
Die Antwort von McDowell ist richtig. Wenn Sie jedoch in einigen der oben genannten Beiträge einen anderen Vorschlag versuchen.
Dann erhalten Sie eine illegalStateException, die besagt, dass der Inhalt bereits verbraucht ist.
quelle
Wir können den folgenden Code auch verwenden, um die HTML-Antwort in Java zu erhalten
quelle
Hier ist eine einfache Möglichkeit, dies zu tun:
Natürlich
responseString
mit der Antwort der Website und der Art der Antwort, die vonHttpResponse
zurückgegeben wirdHttpClient.execute(request)
quelle
Das folgende Codefragment zeigt, wie der Antworttext besser als Zeichenfolge behandelt werden kann, unabhängig davon, ob es sich um eine gültige Antwort oder eine Fehlerantwort für die HTTP-POST-Anforderung handelt:
quelle
Sie können eine 3D-Party-Bibliothek verwenden, die eine HTTP-Anfrage sendet und die Antwort verarbeitet. Eines der bekanntesten Produkte wäre Apache Commons HTTPClient: HttpClient javadoc , HttpClient Maven Artefakt . Es gibt einen weitaus weniger bekannten, aber viel einfacheren HTTPClient (Teil einer von mir geschriebenen Open-Source-MgntUtils-Bibliothek): MgntUtils HttpClient javadoc , MgntUtils-Maven-Artefakt , MgntUtils Github . Mit einer dieser Bibliotheken können Sie Ihre REST-Anfrage senden und als Teil Ihrer Geschäftslogik unabhängig von Spring eine Antwort erhalten
quelle
Wenn Sie Jackson verwenden, um den Antwortkörper zu deserialisieren, besteht eine sehr einfache Lösung darin,
request.getResponseBodyAsStream()
anstelle von zu verwendenrequest.getResponseBodyAsString()
quelle