Evolución de la biblioteca Apache HttpClient
En el desarrollo de aplicaciones Java, Apache HttpClient es una herramienta fundamental para gestionar solicitudes HTTP. Las diferencias entre versiones, especialmente en la forma de instanciar y cerrar clientes, son cruciales para el manejo adecuado de recursos. A continuación, se detallan las variaciones desde la versión 3.x hasta las más recientes.
Versión 3.x de HttpClient
Esta versión utiliza clases heredadas como HttpClient y HttpMethod. El flujo implica crear un cliente, ejecutar un método y liberar la conexión manualmente. Ejemplo simplificado:
HttpClient clienteHttp = new HttpClient();
HttpMethod solicitudGet = new GetMethod("http://ejemplo.com");
clienteHttp.executeMethod(solicitudGet);
System.out.println(solicitudGet.getStatusLine());
System.out.println(solicitudGet.getResponseBodyAsString());
solicitudGet.releaseConnection();
Versiones 4.x hasta 4.2 de HttpClient
Aquí se introducen clases como DefaultHttpClient y la interfaz HttpClient. La gestión de recursos se centraliza mdeiante el cierre del gestor de conexiones. Ejemplo con cambios en variables y estructura:
public void obtenerRecurso(String urlDestino, String codificacion) throws Exception {
HttpClient cliente = new DefaultHttpClient();
HttpGet peticion = new HttpGet(urlDestino);
HttpResponse respuesta = cliente.execute(peticion);
HttpEntity entidad = respuesta.getEntity();
if (entidad != null) {
InputStream flujoEntrada = entidad.getContent();
try {
BufferedReader lector = new BufferedReader(new InputStreamReader(flujoEntrada, codificacion));
String linea = lector.readLine();
System.out.println(linea);
} finally {
flujoEntrada.close();
}
}
cliente.getConnectionManager().shutdown();
}
A partir de la versión 4.3: CloseableHttpClient
La versión 4.3 introduce CloseableHttpClient, creado mdeiante HttpClients.createDefault(). Esto simplifica el cierre de recursos con el método close(). Ejemplo refactorizado con lógica alterada:
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public static String recuperarDatos(String url) {
CloseableHttpClient clienteCerrable = HttpClients.createDefault();
HttpGet solicitud = new HttpGet(url);
String resultado = "";
try {
HttpResponse respuesta = clienteCerrable.execute(solicitud);
HttpEntity cuerpoRespuesta = respuesta.getEntity();
if (cuerpoRespuesta != null) {
resultado = EntityUtils.toString(cuerpoRespuesta);
}
} catch (Exception e) {
// Manejo de excepciones simplificado
} finally {
try {
clienteCerrable.close();
} catch (IOException e) {
// Manejo de errores al cerrar
}
}
return resultado;
}
La principal mejora es la implementación de Closeable, garantizando una gestión automática de recursos mediante bloques try-with-resources en implementaciones modernas.