Apache HttpClient - Controladores de respuesta

Se recomienda procesar las respuestas HTTP mediante los controladores de respuestas. En este capítulo, analizaremos cómo crear controladores de respuesta y cómo usarlos para procesar una respuesta.

Si usa el controlador de respuesta, todas las conexiones HTTP se liberarán automáticamente.

Creando un controlador de respuesta

La API de HttpClient proporciona una interfaz conocida como ResponseHandler en el paquete org.apache.http.client. Para crear un controlador de respuesta, implemente esta interfaz y anule su handleResponse() método.

Cada respuesta tiene un código de estado y si el código de estado está entre 200 y 300, eso significa que la acción se recibió, entendió y aceptó con éxito. Por lo tanto, en nuestro ejemplo, manejaremos las entidades de las respuestas con dichos códigos de estado.

Ejecutando la solicitud usando el controlador de respuesta

Siga los pasos que se indican a continuación para ejecutar la solicitud mediante un controlador de respuesta.

Paso 1: crear un objeto HttpClient

los createDefault() método del HttpClients clase devuelve un objeto de la clase CloseableHttpClient, que es la implementación base del HttpClientinterfaz. Usando este método, cree un objeto HttpClient

CloseableHttpClient httpclient = HttpClients.createDefault();

Paso 2: crear una instancia del controlador de respuesta

Cree una instancia del objeto controlador de respuesta creado anteriormente utilizando la siguiente línea de código:

ResponseHandler<String> responseHandler = new MyResponseHandler();

Paso 3: crear un objeto HttpGet

los HttpGet class representa la solicitud HTTP GET que recupera la información del servidor dado mediante un URI.

Cree una solicitud HttpGet creando una instancia de la clase HttpGet y pasando una cadena que represente el URI como parámetro a su constructor.

ResponseHandler<String> responseHandler = new MyResponseHandler();

Paso 4: ejecutar la solicitud Get usando el controlador de respuesta

los CloseableHttpClient la clase tiene una variante de execute() método que acepta dos objetos ResponseHandler y HttpUriRequest, y devuelve un objeto de respuesta.

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

Ejemplo

El siguiente ejemplo demuestra el uso de controladores de respuesta.

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

Salida

Los programas anteriores generan la siguiente salida:

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