Lettura di un corpo di risposta HTTP come stringa in Java

REST Top

Ho appena annunciato il nuovo corso Learn Spring , incentrato sui fondamenti di Spring 5 e Spring Boot 2:

>> GUARDA IL CORSO Java Top

Ho appena annunciato il nuovo corso Learn Spring , incentrato sui fondamenti di Spring 5 e Spring Boot 2:

>> SCOPRI IL CORSO

1. Introduzione

In questo tutorial, esploreremo diverse librerie per leggere il corpo di una risposta HTTP come stringa in Java. Fin dalle prime versioni, Java ha fornito l' API HttpURLConnection . Questo include solo funzionalità di base ed è noto per non essere molto user-friendly.

Con il rilascio di JDK 11, Java ha introdotto la nuova e migliorata API HttpClient per gestire la comunicazione HTTP. Tratteremo queste librerie e controlleremo alcune alternative come Apache HttpClient e Spring Rest Template.

2. HttpClient

Come accennato in precedenza, HttpClient è stato aggiunto a Java 11. Ci consente di accedere alle risorse sulla rete. Ma, a differenza di HttpURLConnection , HttpClient supporta HTTP / 1.1 e HTTP / 2 . Inoltre, fornisce tipi di richiesta sia sincroni che asincroni .

HttpClient offre un'API moderna con molta flessibilità e potenti funzionalità. Principalmente, questa API è costituita da tre classi principali: HttpClient , HttpRequest e HttpResponse .

HttpResponse descrive il risultato di una chiamata HttpRequest . HttpResponse non viene creato direttamente e viene reso disponibile quando il corpo è stato completamente ricevuto.

Per leggere il corpo di una risposta come una stringa, dobbiamo prima creare semplici oggetti client e richiesta:

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

Quindi, usiamo semplicemente BodyHandlers e chiamiamo il metodo ofString () per restituire la risposta:

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

3. HttpURLConnection

HttpURLConnection è un client HTTP leggero utilizzato per accedere alle risorse tramite il protocollo HTTP o HTTPS e ci consente di creare un InputStream . Una volta ottenuto InputStream, possiamo leggerlo come un normale file locale.

In Java, le classi principali che possiamo utilizzare per accedere a Internet sono la classe java.net.URL e la classe java.net.HttpURLConnection . Innanzitutto, useremo la classe URL per puntare a una risorsa web. Quindi, possiamo accedervi utilizzando la classe HttpURLConnection .

Per ottenere il corpo della risposta da un URL come una stringa , dobbiamo prima creare una HttpURLConnection utilizzando il nostro URL :

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

Il nuovo URL (DUMMY_URL) .openConnection () restituisce un HttpURLConnection . Questo oggetto ci permette di aggiungere intestazioni o controllare il codice di risposta.

Quindi, otteniamo InputStream dall'oggetto connessione :

InputStream inputStream = connection.getInputStream();

Infine, dobbiamo convertire InputStream in una stringa .

4. Apache HttpClient

In questa sezione vedremo come utilizzare Apache HttpClient per leggere il corpo di una risposta HTTP come stringa.

Per utilizzare questa libreria, dovremo aggiungere la sua dipendenza al nostro progetto Maven:

 org.apache.httpcomponents httpclient 4.5.12 

Possiamo recuperare e inviare dati tramite la classe CloseableHttpClient . Per crearne un'istanza con la configurazione predefinita possiamo usare HttpClients.createDefault () .

CloseableHttpClient fornisce un metodo di esecuzione per inviare e ricevere dati. Questo metodo usa un parametro di tipo HttpUriRequest , che ha molte sottoclassi, tra cui HttpGet e HttpPost .

Creiamo prima un oggetto HttpGet :

HttpGet request = new HttpGet(DUMMY_URL);

Secondo, creiamo il client :

CloseableHttpClient client = HttpClients.createDefault();

Terzo, recuperiamo l'oggetto risposta dal risultato del metodo di esecuzione :

CloseableHttpResponse response = client.execute(request);

Finally, we return the response body by converting the response entity to a String:

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

5. Spring RestTemplate

In this section, we'll see how to use Spring RestTemplate for reading an HTTP response body as a string.

The RestTemplate class is an essential tool provided by Spring that offers a simple template for making client-side HTTP operations over underlying HTTP client libraries such as the JDK HttpURLConnection, Apache HttpClient, and others.

RestTemplate provides some useful methods for creating HTTP requests and handling responses.

We can use this library by first adding some dependencies to our Maven project:

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

Per effettuare una richiesta web e restituire il corpo della risposta come una stringa, creiamo prima un'istanza di RestTemplate :

RestTemplate restTemplate = new RestTemplate();

In secondo luogo, otteniamo l'oggetto risposta chiamando il metodo getForObject () , passando l'URL e il tipo di risposta desiderato - useremo String.class nel nostro esempio:

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

6. Conclusione

In questo articolo, abbiamo visto come utilizzare diverse librerie per leggere il corpo di una risposta HTTP come stringa .

Come al solito, il codice completo è disponibile su GitHub.

REST fondo

Ho appena annunciato il nuovo corso Learn Spring , incentrato sui fondamenti di Spring 5 e Spring Boot 2:

>> GUARDA IL CORSO Java bottom

Ho appena annunciato il nuovo corso Learn Spring , incentrato sui fondamenti di Spring 5 e Spring Boot 2:

>> SCOPRI IL CORSO