Apache HttpClient - Gestionnaires de réponse

Le traitement des réponses HTTP à l'aide des gestionnaires de réponses est recommandé. Dans ce chapitre, nous allons discuter de la création de gestionnaires de réponses et de leur utilisation pour traiter une réponse.

Si vous utilisez le gestionnaire de réponses, toutes les connexions HTTP seront libérées automatiquement.

Créer un gestionnaire de réponses

L'API HttpClient fournit une interface appelée ResponseHandler dans le paquet org.apache.http.client. Afin de créer un gestionnaire de réponse, implémentez cette interface et remplacez son handleResponse() méthode.

Chaque réponse a un code d'état et si le code d'état est compris entre 200 et 300, cela signifie que l'action a été reçue, comprise et acceptée avec succès. Par conséquent, dans notre exemple, nous traiterons les entités des réponses avec de tels codes d'état.

Exécution de la demande à l'aide du gestionnaire de réponse

Suivez les étapes ci-dessous pour exécuter la demande à l'aide d'un gestionnaire de réponse.

Étape 1 - Créer un objet HttpClient

le createDefault() méthode de la HttpClients class renvoie un objet de la classe CloseableHttpClient, qui est l'implémentation de base du HttpClientinterface. À l'aide de cette méthode, créez un objet HttpClient

CloseableHttpClient httpclient = HttpClients.createDefault();

Étape 2 - Instancier le gestionnaire de réponse

Instanciez l'objet gestionnaire de réponse créé ci-dessus à l'aide de la ligne de code suivante -

ResponseHandler<String> responseHandler = new MyResponseHandler();

Étape 3 - Créer un objet HttpGet

le HttpGet La classe représente la requête HTTP GET qui récupère les informations du serveur donné à l'aide d'un URI.

Créez une requête HttpGet en instanciant la classe HttpGet et en passant une chaîne représentant l'URI en tant que paramètre à son constructeur.

ResponseHandler<String> responseHandler = new MyResponseHandler();

Étape 4 - Exécutez la demande Get à l'aide du gestionnaire de réponses

le CloseableHttpClient class a une variante de execute() méthode qui accepte deux objets ResponseHandler et HttpUriRequest, et renvoie un objet de réponse.

String httpResponse = httpclient.execute(httpget, responseHandler);

Exemple

L'exemple suivant illustre l'utilisation des gestionnaires de réponse.

import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ResponseHandler;
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;

class MyResponseHandler implements ResponseHandler<String>{
 
   public String handleResponse(final HttpResponse response) throws IOException{

      //Get the status of the response
      int status = response.getStatusLine().getStatusCode();
      if (status >= 200 && status < 300) {
         HttpEntity entity = response.getEntity();
         if(entity == null) {
            return "";
         } else {
            return EntityUtils.toString(entity);
         }

      } else {
         return ""+status;
      }
   }
}

public class ResponseHandlerExample {
   
   public static void main(String args[]) throws Exception{
 
      //Create an HttpClient object
      CloseableHttpClient httpclient = HttpClients.createDefault();

      //instantiate the response handler
      ResponseHandler<String> responseHandler = new MyResponseHandler();

      //Create an HttpGet object
      HttpGet httpget = new HttpGet("http://www.tutorialspoint.com/");

      //Execute the Get request by passing the response handler object and HttpGet object
      String httpresponse = httpclient.execute(httpget, responseHandler);

      System.out.println(httpresponse);
   }
}

Production

Les programmes ci-dessus génèrent la sortie suivante -

<!DOCTYPE html>
<!--[if IE 8]><html class = "ie ie8"> <![endif]-->
<!--[if IE 9]><html class = "ie ie9"> <![endif]-->
<!--[if gt IE 9]><!-->
<html lang = "en-US"> <!--<![endif]-->
<head>
<!-- Basic -->
<meta charset = "utf-8">
<meta http-equiv = "X-UA-Compatible" content = "IE = edge">
<meta name = "viewport" content = "width = device-width,initial-scale = 1.0,userscalable = yes">
<link href = "https://cdn.muicss.com/mui-0.9.39/extra/mui-rem.min.css"
rel = "stylesheet" type = "text/css" />
<link rel = "stylesheet" href = "/questions/css/home.css?v = 3" />
<script src = "/questions/js/jquery.min.js"></script>
<script src = "/questions/js/fontawesome.js"></script>
<script src = "https://cdn.muicss.com/mui-0.9.39/js/mui.min.js"></script>
</head>
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-232293-17');
</script>
</body>