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>