java - from - Apache http client o URLConnection
send http get request java (3)
Esta pregunta ya tiene una respuesta aquí:
Necesito descargar una página web en una aplicación de Android y me está costando mucho decidir si usar el cliente http de Android Apache o URLConnection de Java.
¿Alguna idea?
Google ha desaprobado silenciosamente el uso del cliente HTTP de Apache desde Gingerbread: android-developers.blogspot.com/2011/09/… . Y aunque no lo marcaron con una anotación en desuso, le sugieren que use HttpURLConnection para nuevas aplicaciones, ya it is where we [Google] will be spending our energy going forward
gastaremos it is where we [Google] will be spending our energy going forward
.
Personalmente no me gusta esa decisión y prefiero atenerme a HttpClient 4.1+, ya que es más rápido, tiene menos errores y se actualiza periódicamente. Y si bien no puede actualizar la biblioteca del sistema a la versión 4.1, puede incluir el jar HttpClient en su proyecto de Android (como beneficio adicional, esto le permitirá no depender de las correcciones de errores de Google y las actualizaciones de los proveedores). Sin embargo, hay un inconveniente: para evitar posibles colisiones con la biblioteca incorporada, debe cambiar el nombre de los paquetes httpclient utilizando la herramienta JarJar. Resultó que alguien ya lo había hecho (los proyectos de la biblioteca de Android y los archivos reenvasados están disponibles para descargar):
http://code.google.com/p/httpclientandroidlib/
Este es un reenvasado de HttpClient 4.1 para Android. La versión de HttpClient en el SDK de Android es 4.0beta2. Ha habido varias actualizaciones para HttpClient y algunas correcciones de errores tan necesarias como el caché de autenticación desde la versión 4.0beta.
Dado que Google ha dejado de usar HttpClient en favor del estándar de Java HttpURLConnection, creé un script para convertir una versión de inventario de HttpClient de Apache en una biblioteca de Android.
Cambios en stock HttpClient
- Cambió el nombre de todos los paquetes org.apache.http a ch.boye.httpclientandroidlib
- Se eliminaron todas las clases dependientes de org.ietf. * (Autenticación SPNEGO)
- Reemplazado org.apache.commons.codec.binary.Base64 con android.util.Base64
- Creó una nueva clase HttpClientAndroidLog para reemplazar org.apache.commons.logging
en Gingerbread y más tarde, HttpURLConnection es el camino a seguir. considerar Apache HttpClient en desuso. (También tenga en cuenta que Android no utiliza HttpClient 4.1, mencionado en otro comentario).
Si tiene un caso en el que Apache HttpClient es más rápido, infórmelo como un error aquí: http://code.google.com/p/android/issues/list
Para la mayoría de las cosas diría que HttpClient
es el camino a seguir. Sin embargo, hay algunas situaciones y casos URLConnection
en los que me gustaría recurrir a un URLConnection
. Ejemplos de casos de borde here y here
EDITAR
Una pregunta similar se ha hecho antes: httpclient vs httpurlconnection . HttpUrlConnection
que HttpUrlConnection
es algo más rápido ya que HttpClient
se construye sobre las bibliotecas estándar de Java.Sin embargo , encontraría el código HttpClient
mucho más rápido y más fácil de escribir y mantener. De acuerdo con los comentarios a continuación, los elementos centrales de HttpClient
han sido optimizados para el rendimiento.
Si el desempeño es una preocupación importante, su mejor apuesta es escribir dos clientes, uno con cada método y luego compararlos con ambos. Si haces esto, por favor déjanos saber los resultados.