Cliente HTTP en Java: haciendo solicitudes correctamente de la A a la Z

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 de la A a la Z



En el desarrollo moderno en Java, la interacción con servicios web externos y API REST se ha convertido en una parte esencial de prácticamente cualquier aplicación. Independientemente de si estás escribiendo un microservicio, una aplicación móvil o un sistema corporativo, saber cómo enviar solicitudes HTTP correctamente es una habilidad críticamente importante. En este artículo, analizaremos todas las formas de crear un cliente HTTP en Java: desde el clásico HttpURLConnection hasta bibliotecas modernas como java.net.http.HttpClient, OkHttp y RestTemplate. Aprenderás cómo hacer solicitudes GET, POST, PUT y DELETE, procesar respuestas y elegir la herramienta adecuada para tu tarea.



1. Enfoque clásico: HttpURLConnection



Durante muchos años, la forma estándar de trabajar con HTTP en Java fue la clase HttpURLConnection. Forma parte del JDK y no requiere dependencias adicionales. Sin embargo, su API se considera de bajo nivel y engorrosa, especialmente para solicitudes complejas.



Ejemplo de solicitud GET:

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

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

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

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()); }}


Ejemplo de solicitud POST con JSON:

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 jsonInputString = "{\\"name\\": \\"John\\", \\"age\\": 30}"; try (OutputStream os = connection.getOutputStream()) { byte[] input = jsonInputString.getBytes("utf-8"); os.write(input, 0, input.length); }

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


Ventajas: integrado en el JDK, no requiere bibliotecas.
Desventajas: código complejo, sin soporte para HTTP/2, manejo incómodo de tiempos de espera y errores.



2. HttpClient moderno (Java 11+)



A partir de Java 11, se agregó a la biblioteca estándar un nuevo java.net.http.HttpClient. Soporta HTTP/2, WebSocket, solicitudes asíncronas y proporciona una API mucho más limpia y moderna.



Solicitud GET síncrona:

import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;

public class ModernHttpClientExample { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://a

Blogs

Book Recommendations