Lesen eines HTTP-Antwortkörpers als Zeichenfolge in Java

REST Top

Ich habe gerade den neuen Learn Spring- Kurs angekündigt , der sich auf die Grundlagen von Spring 5 und Spring Boot 2 konzentriert:

>> PRÜFEN SIE DEN KURS Java Top

Ich habe gerade den neuen Learn Spring- Kurs angekündigt , der sich auf die Grundlagen von Spring 5 und Spring Boot 2 konzentriert:

>> Überprüfen Sie den Kurs

1. Einleitung

In diesem Tutorial werden verschiedene Bibliotheken zum Lesen eines HTTP-Antwortkörpers als Zeichenfolge in Java untersucht. Seit den ersten Versionen hat Java die HttpURLConnection- API bereitgestellt . Dies beinhaltet nur grundlegende Funktionen und ist dafür bekannt, dass es nicht sehr benutzerfreundlich ist.

Mit der Veröffentlichung von JDK 11 führte Java die neue und verbesserte HttpClient- API für die HTTP-Kommunikation ein. Wir werden diese Bibliotheken behandeln und einige Alternativen wie den Apache HttpClient und die Spring Rest-Vorlage prüfen.

2. HttpClient

Wie bereits erwähnt, wurde HttpClient zu Java 11 hinzugefügt. Damit können wir über das Netzwerk auf Ressourcen zugreifen. Aber im Gegensatz zu HttpURLConnection , Httpclient unterstützt HTTP / 1.1 und HTTP / 2 . Darüber hinaus bietet es sowohl synchrone als auch asynchrone Anforderungstypen .

HttpClient bietet eine moderne API mit viel Flexibilität und leistungsstarken Funktionen. Diese API besteht hauptsächlich aus drei Kernklassen : HttpClient , HttpRequest und HttpResponse .

HttpResponse beschreibt das Ergebnis eines HttpRequest- Aufrufs. HttpResponse wird nicht direkt erstellt und verfügbar gemacht, wenn der Text vollständig empfangen wurde.

Um einen Antworttext als Zeichenfolge zu lesen , müssen Sie zunächst einen einfachen Client erstellen und Objekte anfordern:

HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(DUMMY_URL)) .build();

Dann verwenden wir einfach BodyHandlers und rufen die Methode ofString () auf, um die Antwort zurückzugeben:

HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());

3. HttpURLConnection

HttpURLConnection ist ein kompakter HTTP-Client, der für den Zugriff auf Ressourcen über das HTTP- oder HTTPS-Protokoll verwendet wird und das Erstellen eines InputStream ermöglicht . Sobald wir den InputStream erhalten haben, können wir ihn wie eine normale lokale Datei lesen.

In Java sind die Hauptklassen, mit denen wir auf das Internet zugreifen können, die Klasse java.net.URL und die Klasse java.net.HttpURLConnection . Zuerst verwenden wir die URL- Klasse, um auf eine Webressource zu verweisen. Dann können wir mit der HttpURLConnection- Klasse darauf zugreifen .

Um die Antwort Körper aus einem bekommen URL als String , sollten wir zuerst eine erstellen HttpURLConnection mit unserem URL :

HttpURLConnection connection = (HttpURLConnection) new URL(DUMMY_URL).openConnection();

Die neue URL (DUMMY_URL) .openConnection () gibt eine HttpURLConnection zurück . Mit diesem Objekt können wir Header hinzufügen oder den Antwortcode überprüfen.

Als nächstes rufen wir den InputStream vom Verbindungsobjekt ab :

InputStream inputStream = connection.getInputStream();

Schließlich müssen wir den InputStream in einen String konvertieren .

4. Apache HttpClient

In diesem Abschnitt erfahren Sie, wie Sie den Apache HttpClient zum Lesen eines HTTP-Antwortkörpers als Zeichenfolge verwenden.

Um diese Bibliothek zu verwenden, müssen wir ihre Abhängigkeit zu unserem Maven-Projekt hinzufügen:

 org.apache.httpcomponents httpclient 4.5.12 

Wir können Daten über die CloseableHttpClient- Klasse abrufen und senden . Um eine Instanz davon mit Standardkonfiguration zu erstellen, können wir HttpClients.createDefault () verwenden .

CloseableHttpClient bietet eine Ausführungsmethode zum Senden und Empfangen von Daten. Diese Methode verwendet einen Parameter vom Typ HttpUriRequest , der viele Unterklassen enthält, einschließlich HttpGet und HttpPost .

Lassen Sie uns zuerst ein HttpGet- Objekt erstellen :

HttpGet request = new HttpGet(DUMMY_URL);

Zweitens erstellen wir den Client :

CloseableHttpClient client = HttpClients.createDefault();

Drittens rufen wir das Antwortobjekt aus dem Ergebnis der Ausführungsmethode ab :

CloseableHttpResponse response = client.execute(request);

Schließlich geben wir den Antworttext zurück, indem wir die Antwortentität in einen String konvertieren :

HttpEntity entity = response.getEntity(); String result = EntityUtils.toString(entity);

5. Spring RestTemplate

In diesem Abschnitt erfahren Sie, wie Sie Spring RestTemplate zum Lesen eines HTTP-Antwortkörpers als Zeichenfolge verwenden.

Die RestTemplate- Klasse ist ein wesentliches Tool von Spring, das eine einfache Vorlage zum Ausführen clientseitiger HTTP-Vorgänge über zugrunde liegende HTTP-Client-Bibliotheken wie JDK HttpURLConnection , Apache HttpClient und andere bietet.

RestTemplate bietet einige nützliche Methoden zum Erstellen von HTTP-Anforderungen und zum Behandeln von Antworten.

Wir können diese Bibliothek verwenden, indem wir unserem Maven-Projekt zunächst einige Abhängigkeiten hinzufügen:

 org.springframework.boot spring-boot-starter-web ${spring-boot.version}   org.springframework.boot spring-boot-starter-test ${spring-boot.version} test 

Um eine Webanforderung zu stellen und den Antworttext als Zeichenfolge zurückzugeben, erstellen wir zunächst eine Instanz von RestTemplate :

RestTemplate restTemplate = new RestTemplate();

Zweitens erhalten wir das Antwortobjekt , indem wir die Methode getForObject () aufrufen , die URL und den gewünschten Antworttyp übergeben - in unserem Beispiel verwenden wir String.class :

String response = restTemplate.getForObject(DUMMY_URL, String.class);

6. Fazit

In diesem Artikel haben wir gesehen, wie mehrere Bibliotheken zum Lesen eines HTTP-Antwortkörpers als Zeichenfolge verwendet werden .

Wie üblich ist der vollständige Code auf GitHub verfügbar.

REST unten

Ich habe gerade den neuen Learn Spring- Kurs angekündigt , der sich auf die Grundlagen von Spring 5 und Spring Boot 2 konzentriert:

>> PRÜFEN SIE DEN KURS Java unten

Ich habe gerade den neuen Learn Spring- Kurs angekündigt , der sich auf die Grundlagen von Spring 5 und Spring Boot 2 konzentriert:

>> Überprüfen Sie den Kurs