Accéder à HTTP sous Android

Lars Vogel

Traducteur

Mishulyna

Cet article décrit comment accéder à des ressources Web via HTTP dans Android. Il est basé sur Eclipse 3.7, Java 1.6 et Android 4.0 (Ice Cream Sandwich).

Nous remercions Lars Vogel qui nous a aimablement autorisés à traduire et héberger cet article.

N'hésitez pas à commenter cet article ! Commentez ?

- Titre : Accéder à HTTP sous Android

- Auteur : Lars Vogel

- Traducteur : Mishulyna

- Parution : 20 avril 2012

- Licence : Le contenu de cet article est rédigé par Lars Vogel et est mis à disposition selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 3.0 non transposé. Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright ® 2013 Developpez.com.

Sommaire

- 1. Vue d'ensemble de l'accès HTTP sous Android

- 1-1. API disponibles

- 1-2. Autorisations requises

- 2. Le « mode strict » Android

- 3. HttpURLConnection

- 4. Vérifiez la disponibilité du réseau

- 5. Proxy

- 6. Liens et littérature

- 6-1. Code source

- 6-2. Ressources Android

- 7. Remerciements

1 - Vue d'ensemble de l'accès HTTP sous Android

1-1 - API disponibles

Android contient le paquetage réseau standard de Java, java.net, qui peut être utilisé pour accéder aux ressources réseau. Android contient également la bibliothèque Apache HttpClient.

La classe de base pour l'accès HTTP dans le paquetage java.net est la classe HttpURLConnection.

La façon privilégiée d'accéder à Internet selon Google est la classe HttpURLConnection, puisque Google concentre ses efforts pour améliorer cette mise en œuvre.

1-2 - Autorisations requises

Pour accéder à Internet, votre application nécessite l'autorisation android.permission.INTERNET.

Pour vérifier l'état du réseau, votre application nécessite l'autorisation android.permission.ACCESS_NETWORK_STATE.

2 - Le « mode strict » Android

Dans une application Android, vous devriez éviter d'effectuer des opérations de longue durée sur le fil d'exécution de l'interface utilisateur. Cela inclut l'accès aux fichiers et au réseau.

StrictMode permet d'établir des politiques dans votre application afin d'éviter de faire des choses incorrectes. Ainsi, StrictMode d'Android 3.0 (Honeycomb) est configuré pour s'arrêter avec une exception NetworkOnMainThreadException, si l'accès réseau s'effectue dans le fil d'exécution de l'interface utilisateur.

Si vous ciblez Android 3.0 ou supérieur, vous pouvez désactiver l'accès réseau effectué dans une tâche d'arrière-plan, via le code suivant, au début de la méthode onCreate() de votre activité.

StrictMode.ThreadPolicy policy = new StrictMode.
ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);

Cette désactivation est déconseillée, mais dans ce tutoriel nous utilisons cette option pour être en mesure d'expliquer l'accès réseau, indépendamment des processus d'arrière-plan.

3 - HttpURLConnection

HttpURLConnection, qui est également disponible dans la norme Java, est un client HTTP léger à usage général, approprié pour la plupart des applications.

Dans la dernière version, HttpURLConnection supporte la compression transparente de réponse (via l'en-tête Accept-Encoding : gzip),Server Name Indication (extension de SSL et TLS) et un cache de réponse.

L'API est relativement simple. Par exemple, pour récupérer la page Web www.vogella.com.

// Quelque part dans votre code, ceci est appelé
// dans un fil d'exécution qui n'est pas celui
// de l'interface utilisateur

try {
URL url = new URL("http://www.vogella.com");
HttpURLConnection con = (HttpURLConnection) url
.openConnection();
readStream(con.getInputStream());
} catch (Exception e) {
e.printStackTrace();
}

private void readStream(InputStream in) {
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(in));
String line = "";
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

La Javadoc suggère de ne pas réutiliser HttpURLConnection. Si vous l'utilisez de cette façon, HttpURLConnection ne posera pas de problèmes de concurrence d'accès, car elle ne sera pas partagée entre les différents fils d'exécution.

4 - Vérifiez la disponibilité du réseau

Évidemment, le réseau n'est pas toujours disponible sur un appareil Android. Vous pouvez vérifier s'il l'est avec le code suivant.

public boolean isNetworkAvailable() {
ConnectivityManager cm = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
// si aucun réseau n'est disponible, networkInfo sera null
// sinon, vérifier si nous sommes connectés
if (networkInfo != null && networkInfo.isConnected()) {
return true;
}
return false;
}

Ceci nécessite l'autorisation ACCESS_NETWORK_STATE.

5 - Proxy

Ce chapitre vous concerne uniquement si vous testez le simulateur Android derrière un proxy. Vous pouvez configurer le proxy via la classe Settings. Par exemple, vous pouvez ajouter la ligne suivante à votre méthode onCreate dans votre activité.

Settings.System.putString(getContentResolver(), Settings.System.HTTP_PROXY, "myproxy:8080");

Pour modifier les paramètres du proxy, vous devez avoir l'autorisation android.permission.WRITE_SETTINGS dans votre fichier AndroidManifest.xml.

Il semble que la résolution DNS ne fonctionne pas derrière un proxy. Voir le bogue 2764.

6 - Liens et littérature

6-1 - Code source

- Codes source d'exemple

6-2 - Ressources Android

- Framework Crest pour accéder aux services rest, fonctionne aussi sous Android

- Apache HttpClient

7 - Remerciements

Vous pouvez retrouver l'article original à l'adresse Android HTTP Access - Tutorial. Nous remercions Lars Vogel qui nous a aimablement autorisés à traduire et héberger ses articles.

Nous remercions aussi Mishulyna pour sa traduction, ainsi que Jacques THÉRY pour sa relecture orthographique.