Cliente HTTP en Java: haciendo solicitudes correctamente

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cliente HTTP en Java: haciendo solicitudes correctamente



En el desarrollo moderno, prácticamente cualquier aplicación interactúa con servicios externos a través de HTTP. Ya sea una API REST, la descarga de datos desde un servidor o el envío de formularios, saber trabajar con solicitudes HTTP es una habilidad obligatoria para cualquier desarrollador Java. En este artículo analizaremos cómo crear un cliente HTTP en Java, utilizando tanto las herramientas estándar como bibliotecas de terceros populares. Aprenderá cómo realizar correctamente solicitudes GET y POST, manejar errores y analizar respuestas.



1. Enfoque clásico: HttpURLConnection



Durante mucho tiempo, la forma estándar de trabajar con HTTP en Java fue la clase HttpURLConnection. Esta pertenece al paquete java.net y no requiere la instalación de dependencias adicionales. Veamos un ejemplo de cómo realizar una solicitud GET:



import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;

public class SimpleHttpClient { public static void main(String[] args) throws Exception { URL url = new URL("https://api.example.com/data"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("Accept", "application/json");

int responseCode = connection.getResponseCode(); System.out.println("Response Code: " + responseCode);

if (responseCode == HttpURLConnection.HTTP_OK) { BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String inputLine; StringBuilder response = new StringBuilder();

while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); System.out.println("Response: " + response.toString()); } else { System.out.println("GET request failed"); } connection.disconnect(); }}


Para una solicitud POST con el envío de datos JSON, el código será un poco más complejo:



import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;

public class PostExample { public static void main(String[] args) throws Exception { URL url = new URL("https://api.example.com/users"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/json"); connection.setDoOutput(true);

String jsonInput = "{\\"name\\":\\"John\\",\\"email\\":\\"john@example.com\\"}";

try (OutputStream os = connection.getOutputStream()) { byte[] input = jsonInput.getBytes("utf-8"); os.write(input, 0, input.length); }

int responseCode = connection.getResponseCode(); System.out.println("POST Response Code: " + responseCode);

if (responseCode == HttpURLConnection.HTTP_CREATED) { // La lectura de la respuesta es análoga a GET } connection.disconnect(); }}


Ventajas de HttpURLConnection:

  • No requiere bibliotecas adicionales
  • Control total sobre la solicitud
  • Soporte para todos los métodos HTTP


Desventajas:

  • API verbosa e incómoda
  • Difícil manejo de errores
  • Sin soporte integrado para protocolos modernos (HTTP/2)


2. Estándar moderno: HttpClient (Java 11+)



A partir de Java 11, se agregó a la biblioteca estándar el nuevo java.net.http.HttpClient. Este proporciona una API moderna, asíncrona y mucho más conveniente. Así es como se ve una solicitud GET con esta herramienta:



import java.net.URI;import java.net.http.HttpClient;import java.net.ht                

Blogs

Book Recommendations