Het lezen van een HTTP-antwoordtekst als een tekenreeks in Java

REST Top

Ik heb zojuist het nieuwe aangekondigd Leer de lente natuurlijk, gericht op de basisprincipes van Spring 5 en Spring Boot 2:

>> BEKIJK DE CURSUS Java Top

Ik heb zojuist het nieuwe aangekondigd Leer de lente natuurlijk, gericht op de basisprincipes van Spring 5 en Spring Boot 2:

>> BEKIJK DE CURSUS

1. Inleiding

In deze zelfstudie verkennen we verschillende bibliotheken voor het lezen van een HTTP-antwoordtekst als een tekenreeks in Java. Sinds de eerste versies heeft Java het HttpURLConnection API. Dit omvat alleen basisfuncties en staat bekend als niet erg gebruiksvriendelijk.

Met de release van JDK 11 introduceerde Java het nieuwe en verbeterde HttpClient API om HTTP-communicatie af te handelen. We behandelen deze bibliotheken en we zullen enkele alternatieven bekijken, zoals de Apache HttpClient en de Spring Rest-sjabloon.

2. HttpClient

Zoals we al eerder zeiden, HttpClient is toegevoegd aan Java 11. Hiermee hebben we toegang tot bronnen via het netwerk. Maar niet zoals HttpURLConnection, HttpClient ondersteunt HTTP / 1.1 en HTTP / 2. Bovendien is het biedt zowel synchrone als asynchrone aanvraagtypen.

HttpClient biedt een moderne API met veel flexibiliteit en krachtige features. Deze API bestaat voornamelijk uit drie kernklassen: HttpClient, HttpRequest, en HttpResponse.

HttpResponse beschrijft het resultaat van een HttpRequest bellen. HttpResponse wordt niet direct aangemaakt en wordt beschikbaar gesteld wanneer het lichaam volledig is ontvangen.

Om een ​​antwoordtekst te lezen als een Draad, we moeten eerst eenvoudige client- en verzoekobjecten maken:

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

Vervolgens gebruiken we gewoon BodyHandlers en roep de methode aan ofString () om het antwoord te retourneren:

HttpResponse-antwoord = client.send (verzoek, HttpResponse.BodyHandlers.ofString ());

3. HttpURLConnection

HttpURLConnection is een lichtgewicht HTTP-client die wordt gebruikt om toegang te krijgen tot bronnen via het HTTP- of HTTPS-protocol en waarmee we een InputStream. Zodra we het InputStream, we kunnen het lezen als een normaal lokaal bestand.

In Java zijn de belangrijkste klassen die we kunnen gebruiken om toegang te krijgen tot internet de java.net.URL klasse en de java.net.HttpURLConnection klasse. Eerst gebruiken we de URL class om naar een webresource te verwijzen. Vervolgens kunnen we er toegang toe krijgen door de HttpURLConnection klasse.

Om de antwoordtekst van een URL als een Draad, moeten we eerst Creëer een HttpURLConnection met behulp van onze URL:

HttpURLConnection-verbinding = (HttpURLConnection) nieuwe URL (DUMMY_URL) .openConnection ();

De nieuwe URL (DUMMY_URL) .openConnection () geeft een terug HttpURLConnection. Met dit object kunnen we headers toevoegen of de responscode controleren.

Laten we het volgende doen pak de InputStream van de verbinding voorwerp:

InputStream inputStream = connection.getInputStream ();

Ten slotte moeten we converteer het InputStream naar een Draad.

4. Apache HttpClient

In dit gedeelte zullen we zien hoe u de Apache kunt gebruiken HttpClient voor het lezen van een HTTP-antwoordtekst als een tekenreeks.

Om deze bibliotheek te gebruiken, moeten we zijn afhankelijkheid toevoegen aan ons Maven-project:

 org.apache.httpcomponents httpclient 4.5.12 

Wij kunnen gegevens ophalen en verzenden via de CloseableHttpClient klasse. Om er een instantie van te maken met de standaardconfiguratie, kunnen we de HttpClients.createDefault ().

CloseableHttpClient biedt een uitvoeren methode om gegevens te verzenden en te ontvangen. Deze methode gebruikt een parameter van het type HttpUriRequest, die veel subklassen heeft, waaronder HttpGet en HttpPost.

Laten we eerst Creëer een HttpGet voorwerp:

HttpGet request = nieuwe HttpGet (DUMMY_URL);

Ten tweede, laten we creëer de klant:

CloseableHttpClient-client = HttpClients.createDefault ();

Ten derde, wij haal het antwoordobject op van het resultaat van de uitvoeren methode:

CloseableHttpResponse response = client.execute (verzoek);

Ten slotte sturen we het antwoordorgaan terug door het converteren van de responsentiteit naar een Draad:

HttpEntity entiteit = response.getEntity (); String resultaat = EntityUtils.toString (entiteit);

5. Lente RestTemplate

In dit gedeelte zullen we zien hoe u Spring kunt gebruiken RestTemplate voor het lezen van een HTTP-antwoordtekst als een tekenreeks.

De RestTemplate class is een essentiële tool van Spring die biedt een eenvoudige sjabloon voor het uitvoeren van HTTP-bewerkingen aan de clientzijde via onderliggende HTTP-clientbibliotheken zoals de JDK HttpURLConnection, Apache HttpClient, en anderen.

RestTemplate biedt een aantal handige methoden voor het maken van HTTP-verzoeken en het afhandelen van antwoorden.

We kunnen deze bibliotheek gebruiken door eerst enkele afhankelijkheden toe te voegen aan ons Maven-project:

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

Om een ​​webverzoek te doen en de antwoordtekst als een tekenreeks te retourneren, laten we eerst maak een instantie van RestTemplate:

RestTemplate restTemplate = nieuwe RestTemplate ();

Ten tweede, wij verkrijg het responsobject door de methode aan te roepen getForObject (), door de URL en het gewenste reactietype door te geven - we gebruiken String.class in ons voorbeeld:

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

6. Conclusie

In dit artikel hebben we gezien hoe u verschillende bibliotheken kunt gebruiken om een ​​HTTP-antwoordtekst te lezen als een Draad.

Zoals gewoonlijk is de volledige code beschikbaar op GitHub.

REST onder

Ik heb zojuist het nieuwe aangekondigd Leer de lente natuurlijk, gericht op de basisprincipes van Spring 5 en Spring Boot 2:

>> BEKIJK DE CURSUS Java onderkant

Ik heb zojuist het nieuwe aangekondigd Leer de lente natuurlijk, gericht op de basisprincipes van Spring 5 en Spring Boot 2:

>> BEKIJK DE CURSUS

$config[zx-auto] not found$config[zx-overlay] not found