Apache HttpClient - Autenticación de proxy
En este capítulo, aprenderemos cómo crear una HttpRequest autenticada usando un nombre de usuario y contraseña y un túnel a través de un proxy a un host de destino, usando un ejemplo.
Paso 1: crear un objeto CredentialsProvider
La interfaz CredentialsProvider mantiene una colección para contener las credenciales de inicio de sesión del usuario. Puede crear su objeto creando una instancia de la clase BasicCredentialsProvider, la implementación predeterminada de esta interfaz.
CredentialsProvider credentialsPovider = new BasicCredentialsProvider();
Paso 2: establece las credenciales
Puede configurar las credenciales requeridas para el objeto CredentialsProvider usando el setCredentials()método. Este método acepta dos objetos:
AuthScope object - Alcance de autenticación que especifica los detalles como nombre de host, número de puerto y nombre del esquema de autenticación.
Credentials object- Especificando las credenciales (nombre de usuario, contraseña). Configure las credenciales con elsetCredentials() método para host y proxy como se muestra a continuación.
credsProvider.setCredentials(new AuthScope("example.com", 80), new
UsernamePasswordCredentials("user", "mypass"));
credsProvider.setCredentials(new AuthScope("localhost", 8000), new
UsernamePasswordCredentials("abc", "passwd"));
Paso 3: crea un objeto HttpClientBuilder
Crear un HttpClientBuilder utilizando la custom() método del HttpClients clase como se muestra a continuación -
//Creating the HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();
Paso 4: establecer el proveedor de credenciales
Puede establecer el objeto CredentialsProvider en un objeto HttpClientBuilder utilizando el setDefaultCredentialsProvider()método. Pasar el creado previamenteCredentialsProvider objetar este método.
clientbuilder = clientbuilder.setDefaultCredentialsProvider(credsProvider);
Paso 5: compila el CloseableHttpClient
Construye el CloseableHttpClient objeto usando el build() método.
CloseableHttpClient httpclient = clientbuilder.build();
Paso 6: cree el proxy y los hosts de destino
Cree los hosts de destino y proxy creando instancias de HttpHost clase.
//Creating the target and proxy hosts
HttpHost target = new HttpHost("example.com", 80, "http");
HttpHost proxy = new HttpHost("localhost", 8000, "http");
Paso 7: configura el proxy y crea un objeto RequestConfig
Crear un RequestConfig.Builder objeto usando el custom()método. Establezca el objeto proxyHost creado anteriormente en elRequestConfig.Builder utilizando la setProxy()método. Finalmente, construya elRequestConfig objeto usando el build() método.
RequestConfig.Builder reqconfigconbuilder= RequestConfig.custom();
reqconfigconbuilder = reqconfigconbuilder.setProxy(proxyHost);
RequestConfig config = reqconfigconbuilder.build();
Paso 8: cree un objeto de solicitud HttpGet y establezca el objeto de configuración en él.
Crear un HttpGetobjeto creando una instancia de la clase HttpGet. Establezca el objeto de configuración creado en el paso anterior a este objeto usando elsetConfig() método.
//Create the HttpGet request object
HttpGet httpGet = new HttpGet("/");
//Setting the config to the request
httpget.setConfig(config);
Paso 9: ejecutar la solicitud
Ejecute la solicitud pasando el objeto HttpHost (destino) y la solicitud (HttpGet) como parámetros al execute() método.
HttpResponse httpResponse = httpclient.execute(targetHost, httpget);
Ejemplo
El siguiente ejemplo demuestra cómo ejecutar una solicitud HTTP a través de un proxy utilizando un nombre de usuario y una contraseña.
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
public class ProxyAuthenticationExample {
public static void main(String[] args) throws Exception {
//Creating the CredentialsProvider object
CredentialsProvider credsProvider = new BasicCredentialsProvider();
//Setting the credentials
credsProvider.setCredentials(new AuthScope("example.com", 80),
new UsernamePasswordCredentials("user", "mypass"));
credsProvider.setCredentials(new AuthScope("localhost", 8000),
new UsernamePasswordCredentials("abc", "passwd"));
//Creating the HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();
//Setting the credentials
clientbuilder = clientbuilder.setDefaultCredentialsProvider(credsProvider);
//Building the CloseableHttpClient object
CloseableHttpClient httpclient = clientbuilder.build();
//Create the target and proxy hosts
HttpHost targetHost = new HttpHost("example.com", 80, "http");
HttpHost proxyHost = new HttpHost("localhost", 8000, "http");
//Setting the proxy
RequestConfig.Builder reqconfigconbuilder= RequestConfig.custom();
reqconfigconbuilder = reqconfigconbuilder.setProxy(proxyHost);
RequestConfig config = reqconfigconbuilder.build();
//Create the HttpGet request object
HttpGet httpget = new HttpGet("/");
//Setting the config to the request
httpget.setConfig(config);
//Printing the status line
HttpResponse response = httpclient.execute(targetHost, httpget);
System.out.println(response.getStatusLine());
}
}
Salida
Al ejecutarse, el programa anterior genera la siguiente salida:
HTTP/1.1 200 OK