web-dev-qa-db-fra.com

Client Apache http ou URLConnection

Je dois télécharger une page Web sur une application Android et j'ai du mal à décider d'utiliser le Android client Apache http ou la connexion URLConnection de Java).

Des pensées?

52
Amit Raz

Pour la plupart des choses, je dirais que HttpClient est la voie à suivre. Cependant, il y a des situations et des cas Edge où je retomberais sur un URLConnection. Exemples de cas Edge ici et ici

[~ # ~] modifier [~ # ~]
Une question similaire a déjà été posée: httpclient vs httpurlconnectionJe suppose que HttpUrlConnection est un peu plus rapide car le HttpClient est construit au-dessus des bibliothèques standard Java. Cependant Je trouverais le code HttpClient beaucoup plus rapide et plus facile à écrire et à maintenir. Selon un commentaire ci-dessous, les éléments principaux de HttpClient ont été optimisés en termes de performances.

Si la performance est une préoccupation majeure, le mieux est d'écrire deux clients, un en utilisant chaque méthode, puis de les comparer tous les deux. Si vous le faites, veuillez nous en informer.

27
dave.c

Google a discrètement déprécié l'utilisation du client HTTP Apache depuis Gingerbread: http://Android-developers.blogspot.com/2011/09/androids-http-clients.html . Et bien qu'ils ne l'aient pas marqué avec une annotation obsolète, ils vous suggèrent d'utiliser HttpURLConnection pour les nouvelles applications comme: it is where we [Google] will be spending our energy going forward.

Personnellement, je n'aime pas cette décision et je préfère m'en tenir à HttpClient 4.1+, car il est plus rapide, a moins de bugs et est mis à jour régulièrement. Et bien que vous ne puissiez pas mettre à niveau la bibliothèque système vers la version 4.1, vous pouvez inclure le pot HttpClient à votre Android (comme avantage supplémentaire, cela vous permettrait de ne pas dépendre des corrections de bogues Google et des mises à jour des fournisseurs) Il y a cependant un écueil: pour éviter d'éventuelles collisions avec la bibliothèque intégrée, vous devez renommer les packages httpclient à l'aide de l'outil JarJar. Il s'est avéré que quelqu'un l'a déjà fait (jar reconditionné et Android sont disponibles pour Télécharger):

http://code.google.com/p/httpclientandroidlib/

Il s'agit d'un reconditionnement de HttpClient 4.1 pour Android. La version de HttpClient dans le SDK Android est 4.0beta2. Il y a eu plusieurs mises à jour de HttpClient et quelques corrections de bugs bien nécessaires comme la mise en cache d'authentification depuis la 4.0beta.

Étant donné que Google a déprécié HttpClient au profit de Java standard HttpURLConnection, j'ai créé un script pour convertir une version stock de Apache HttpClient en une bibliothèque Android Android.

Modifications du stock HttpClient

  • Renommé tous les packages org.Apache.http en ch.boye.httpclientandroidlib
  • Supprimé toutes les classes dépendant de org.ietf. * (Authentification SPNEGO)
  • Org.Apache.commons.codec.binary.Base64 remplacé par Android.util.Base64
  • Création d'une nouvelle classe HttpClientAndroidLog pour remplacer org.Apache.commons.logging
45
Idolon

dans Gingerbread et plus tard, HttpURLConnection est la voie à suivre. considérez Apache HttpClient obsolète. (notez également que Android n'utilise pas HttpClient 4.1, mentionné dans un autre commentaire.)

si vous avez un cas où Apache HttpClient est plus rapide, signalez-le comme un bogue ici: http://code.google.com/p/Android/issues/list

14
Elliott Hughes