Leer un cuerpo de respuesta HTTP como una cadena en Java

DESCANSO Arriba

Acabo de anunciar el nuevo curso Learn Spring , centrado en los fundamentos de Spring 5 y Spring Boot 2:

>> VER EL CURSO Java Top

Acabo de anunciar el nuevo curso Learn Spring , centrado en los fundamentos de Spring 5 y Spring Boot 2:

>> VER EL CURSO

1. Introducción

En este tutorial, exploraremos varias bibliotecas para leer un cuerpo de respuesta HTTP como una cadena en Java. Desde las primeras versiones, Java proporcionó la API HttpURLConnection . Esto incluye solo funciones básicas y es conocido por no ser muy fácil de usar.

Con el lanzamiento de JDK 11, Java introdujo la nueva y mejorada API HttpClient para manejar la comunicación HTTP. Cubriremos estas bibliotecas y verificaremos algunas alternativas como Apache HttpClient y Spring Rest Template.

2. HttpClient

Como mencionamos anteriormente, HttpClient se agregó a Java 11. Nos permite acceder a recursos a través de la red. Pero, a diferencia de HttpURLConnection , HttpClient admite HTTP / 1.1 y HTTP / 2 . Además, proporciona tipos de solicitud tanto síncronos como asincrónicos .

HttpClient ofrece una API moderna con mucha flexibilidad y potentes funciones. Básicamente, esta API consta de tres clases principales: HttpClient , HttpRequest y HttpResponse .

HttpResponse describe el resultado de una llamada HttpRequest . HttpResponse no se crea directamente y está disponible cuando el cuerpo se ha recibido por completo.

Para leer un cuerpo de respuesta como una cadena, primero necesitaremos crear un cliente simple y objetos de solicitud:

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

Luego, simplemente usamos BodyHandlers y llamamos al método ofString () para devolver la respuesta:

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

3. HttpURLConnection

HttpURLConnection es un cliente HTTP ligero que se utiliza para acceder a los recursos a través del protocolo HTTP o HTTPS y nos permite crear un InputStream . Una vez que obtenemos InputStream, podemos leerlo como un archivo local normal.

En Java, las clases principales que podemos usar para acceder a Internet son la clase java.net.URL y la clase java.net.HttpURLConnection . Primero, usaremos la clase URL para apuntar a un recurso web. Luego, podemos acceder a él usando la clase HttpURLConnection .

Para obtener el cuerpo de la respuesta de una URL como una cadena , primero debemos crear una HttpURLConnection usando nuestra URL :

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

La nueva URL (DUMMY_URL) .openConnection () devuelve una HttpURLConnection . Este objeto nos permite agregar encabezados o verificar el código de respuesta.

A continuación, obtengamos InputStream del objeto de conexión :

InputStream inputStream = connection.getInputStream();

Finalmente, necesitamos convertir InputStream a String .

4. Apache HttpClient

En esta sección, veremos cómo usar Apache HttpClient para leer un cuerpo de respuesta HTTP como una cadena.

Para usar esta biblioteca, necesitaremos agregar su dependencia a nuestro proyecto Maven:

 org.apache.httpcomponents httpclient 4.5.12 

Podemos recuperar y enviar datos a través de la clase CloseableHttpClient . Para crear una instancia de él con la configuración predeterminada, podemos usar HttpClients.createDefault () .

CloseableHttpClient proporciona un método de ejecución para enviar y recibir datos. Este método utiliza un parámetro de tipo HttpUriRequest , que tiene muchas subclases, incluidas HttpGet y HttpPost .

Primero creemos un objeto HttpGet :

HttpGet request = new HttpGet(DUMMY_URL);

En segundo lugar, creemos el cliente :

CloseableHttpClient client = HttpClients.createDefault();

En tercer lugar, recuperamos el objeto de respuesta del resultado del método de ejecución :

CloseableHttpResponse response = client.execute(request);

Finalmente, devolvemos el cuerpo de la respuesta convirtiendo la entidad de respuesta en una Cadena :

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

5. Spring RestTemplate

En esta sección, veremos cómo usar Spring RestTemplate para leer un cuerpo de respuesta HTTP como una cadena.

La clase RestTemplate es una herramienta esencial proporcionada por Spring que ofrece una plantilla simple para realizar operaciones HTTP del lado del cliente a través de bibliotecas de cliente HTTP subyacentes como JDK HttpURLConnection , Apache HttpClient y otras.

RestTemplate proporciona algunos métodos útiles para crear solicitudes HTTP y manejar respuestas.

Podemos usar esta biblioteca agregando primero algunas dependencias a nuestro proyecto Maven:

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

Para realizar una solicitud web y devolver el cuerpo de la respuesta como una cadena, primero creemos una instancia de RestTemplate :

RestTemplate restTemplate = new RestTemplate();

En segundo lugar, obtenemos el objeto de respuesta llamando al método getForObject () , pasando la URL y el tipo de respuesta deseado ; usaremos String.class en nuestro ejemplo:

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

6. Conclusión

En este artículo, hemos visto cómo usar varias bibliotecas para leer un cuerpo de respuesta HTTP como una cadena .

Como de costumbre, el código completo está disponible en GitHub.

DESCANSO inferior

Acabo de anunciar el nuevo curso Learn Spring , centrado en los fundamentos de Spring 5 y Spring Boot 2:

>> VER EL CURSO Java bottom

Acabo de anunciar el nuevo curso Learn Spring , centrado en los fundamentos de Spring 5 y Spring Boot 2:

>> VER EL CURSO