java - Apache HttpClient 4.1-Autenticación Proxy
apache-httpclient-4.x proxy-authentication (6)
Cómo configurar la autenticación proxy usando el cliente http de Apache
(Pre-autorización en redes proxy)
Esta respuesta utiliza HttpClient v4.1 de Apache y posteriores.
La respuesta aceptada no funcionó para mí, ¡pero encontré algo más que sí!
Aquí hay algunos códigos verificados y probados de apache que demuestran cómo autenticarse a través de un proxy para una solicitud HTTP.
La documentación completa se encuentra aquí: https://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html .
También hay un excelente ejemplo de Apache aquí: https://hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/apache/http/examples/client/ClientProxyAuthentication.java
- Reemplace
my_username
con su nombre de usuario proxy - Reemplace
my_password
con su contraseña de proxy - Reemplace
proxy.mycompany.com
con su servidor proxy - Reemplace
8080
con su puerto proxy - Reemplace
google.com
con el host del sitio al que desea enviar su solicitud HTTP. - Reemplace
/some-path
con la ruta a la que desea enviar la solicitud HTTP. Esto utiliza el sitio host que especificó anteriormente (google.com).
El siguiente ejemplo autenticará el username:[email protected]:8080
y enviará una solicitud GET
a http://www.google.com/some-path
e imprimirá el código HTTP de la respuesta.
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
new AuthScope("proxy.mycompany", 8080),
new UsernamePasswordCredentials("my_username", "my_password"));
CloseableHttpClient httpclient = HttpClients.custom()
.setDefaultCredentialsProvider(credsProvider).build();
try {
//Replace "google.com" with the target host you want to send the request to
HttpHost target = new HttpHost("google.com", 80, "http");
HttpHost proxy = new HttpHost("proxy.mycompany", 8080);
RequestConfig config = RequestConfig.custom()
.setProxy(proxy)
.build();
CloseableHttpResponse response = null;
//Replace "/some-path" with the path you want to send a get request to.
HttpPost httppost = new HttpPost("/some-path");
httppost.setConfig(config);
response = httpclient.execute(target, httppost);
try {
System.out.println("Return status code is "+response.getStatusLine().getStatusCode());
} finally {
response.close();
}
} finally {
httpclient.close();
}
He estado tratando de configurar el usuario y la contraseña para la autenticación de proxy de las propiedades configuradas mientras utilizaba el cliente http de Apaches HttpComponent, pero sin éxito. Todos los ejemplos que he encontrado se refieren a métodos y clases que ya no están disponibles, como HttpState
y setProxyCredentials
.
Entonces, ¿alguien puede darme un ejemplo de cómo configurar las credenciales de proxy?
En lugar de NTLM, se puede usar simplemente el nombre de usuario y la contraseña antiguos en 4.3+ httpClient, de la siguiente manera:
HttpHost proxy = new HttpHost("x.x.com",8080);
Credentials credentials = new UsernamePasswordCredentials("username","password");
AuthScope authScope = new AuthScope("x.x.com", 8080);
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(authScope, credentials);
HttpClient client = HttpClientBuilder.create().setProxy(proxy).setDefaultCredentialsProvider(credsProvider).build();
HttpResponse response=client.execute(new HttpGet("http://.com/questions/6962047/apache-httpclient-4-1-proxy-authentication"));
Para Basic-Auth se ve así:
DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getCredentialsProvider().setCredentials(
new AuthScope("PROXY HOST", 8080),
new UsernamePasswordCredentials("username", "password"));
HttpHost targetHost = new HttpHost("TARGET HOST", 443, "https");
HttpHost proxy = new HttpHost("PROXY HOST", 8080);
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
AFAIK NTLM no es compatible de forma inmediata. Pero es posible que pueda administrar eso utilizando NTCredentials
y tal vez sobrecargando DefaultProxyAuthenticationHandler
.
Para HttpClient 4.5 y por autenticación de solicitud:
HttpContext httpContext = new BasicHttpContext();
AuthState authState = new AuthState();
authState.update(new BasicScheme(), new UsernamePasswordCredentials("userName", "password"));
httpContext.setAttribute(HttpClientContext.PROXY_AUTH_STATE, authState);
CloseableHttpResponse httpResponse = httpClient.execute(httpRequest, httpContext);
Para cualquiera que busque la respuesta para 4.3 ... es bastante nuevo y su ejemplo no usó el nuevo HttpClientBuilder ... así es como implementé esto en esa versión:
NTCredentials ntCreds = new NTCredentials(ntUsername, ntPassword,localMachineName, domainName );
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials( new AuthScope(proxyHost,proxyPort), ntCreds );
HttpClientBuilder clientBuilder = HttpClientBuilder.create();
clientBuilder.useSystemProperties();
clientBuilder.setProxy(new HttpHost(pxInfo.getProxyURL(), pxInfo.getProxyPort()));
clientBuilder.setDefaultCredentialsProvider(credsProvider);
clientBuilder.setProxyAuthenticationStrategy(new ProxyAuthenticationStrategy());
CloseableHttpClient client = clientBuilder.build();
Una cosa más simple me funcionó para NTLM:
httpclient.getCredentialsProvider().setCredentials(
new AuthScope(proxy_host, proxy_port),
new NTCredentials(this.proxy_user, this.proxy_pass, this.proxy_host, this.proxy_domain));
HttpHost proxy = new HttpHost(this.proxy_host, this.proxy_port, "http");
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);