Traitement d’une réponse HTTP avec le client apache

Devant faire une requête HTTP dans android, j'ai commencé par écrire le code suivant en utilisant l'API du client HTTP apache (inclus en standard dans android) :

final HttpClient httpClient = ......; // création et initialisation du client http apache
HttpPost httppost = ......; // création et initialisation de la requête http
ResponseHandler rh = new ResponseHandler() {
public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
HttpEntity entity = response.getEntity();
if (entity != null) {
StringBuilder out = new StringBuilder();
byte[] b = EntityUtils.toByteArray(entity);
out.append(new String(b, 0, b.length));
return out.toString();
} else {
return "";
}
}
};
String responseString = httpClient.execute(httppost, rh);

Suite à une problème, j'ai découvert que le serveur retournait une erreur http 403 (accès interdit). J'ai donc rajouté le code en gras ci-dessous afin de gérer le cas où celui-ci ne retourne pas OK :

final HttpClient httpClient = ......; // création et initialisation du client http apache
HttpPost httppost = ......; // création et initialisation de la requête http
ResponseHandler rh = new ResponseHandler() {
public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity entity = response.getEntity();
if (entity != null) {
StringBuilder out = new StringBuilder();
byte[] b = EntityUtils.toByteArray(entity);
out.append(new String(b, 0, b.length));
return out.toString();
} else {
return "";
}
} else {
StatusLine sl = response.getStatusLine();
String message = "Erreur HTTP " + sl.getStatusCode() + " Raison: " +
sl.getReasonPhrase();
throw new HttpErrorException(message);
}
}
};
String responseString = httpClient.execute(httppost, rh);

remarque : J'ai créé la classe HttpErrorException qui hérite de IOException pour rester conforme avec la spécification de la méthode handleResponse dans l'interface ResponseHandler.
Après cette modification, l'appelant doit faire un catch (HttpErrorException) pour traiter spécifiquement le cas où le serveur ne retourne pas OK.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.