Apache HttpClient - Gestori delle risposte

Si consiglia di elaborare le risposte HTTP utilizzando i gestori delle risposte. In questo capitolo, discuteremo come creare gestori di risposta e come utilizzarli per elaborare una risposta.

Se utilizzi il gestore delle risposte, tutte le connessioni HTTP verranno rilasciate automaticamente.

Creazione di un gestore di risposte

L'API HttpClient fornisce un'interfaccia nota come ResponseHandler nella confezione org.apache.http.client. Per creare un gestore di risposte, implementare questa interfaccia e sovrascrivere la sua handleResponse() metodo.

Ogni risposta ha un codice di stato e se il codice di stato è compreso tra 200 e 300, significa che l'azione è stata ricevuta, compresa e accettata con successo. Pertanto, nel nostro esempio, gestiremo le entità delle risposte con tali codici di stato.

Esecuzione della richiesta utilizzando il gestore della risposta

Seguire i passaggi indicati di seguito per eseguire la richiesta utilizzando un gestore di risposte.

Passaggio 1: creare un oggetto HttpClient

Il createDefault() metodo del HttpClients class restituisce un oggetto della classe CloseableHttpClient, che è l'implementazione di base di HttpClientinterfaccia. Utilizzando questo metodo creare un oggetto HttpClient

CloseableHttpClient httpclient = HttpClients.createDefault();

Passaggio 2: creare un'istanza del gestore delle risposte

Crea un'istanza dell'oggetto gestore della risposta creato sopra utilizzando la seguente riga di codice:

ResponseHandler<String> responseHandler = new MyResponseHandler();

Passaggio 3: creare un oggetto HttpGet

Il HttpGet class rappresenta la richiesta HTTP GET che recupera le informazioni del server dato utilizzando un URI.

Creare una richiesta HttpGet creando un'istanza della classe HttpGet e passando una stringa che rappresenta l'URI come parametro al relativo costruttore.

ResponseHandler<String> responseHandler = new MyResponseHandler();

Passaggio 4: eseguire la richiesta Get utilizzando il gestore delle risposte

Il CloseableHttpClient class ha una variante di execute() metodo che accetta due oggetti ResponseHandler e HttpUriRequest e restituisce un oggetto risposta.

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

Esempio

L'esempio seguente mostra l'utilizzo dei gestori di risposta.

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);
   }
}

Produzione

I programmi di cui sopra generano il seguente output:

<!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>