I have been working with Proxies as well. I am no expert, but I think your
AuthScope is insufficient.
I have a different situation that you do. I override CredentialsProvider,
which I don't think you need to do, but it does reveal some things when you do
it that way.
When an AuthScope comes into getCredentials(AuthScope a); it has a "scheme"
associated with it. That scheme is matched against other schemes, such as
AuthSchemes.DIGEST. You may be able to just change your code to create your
AuthScope creation to something like:
new AuthScope(new HttpHost("80.1.2.3", 3128), AuthScope.ANY_REALM,
AuthScheme.DIGEST)
If not, you can create your own CredentialsProvider. In the getCredentials()
method, you can verify that it is using a DIGEST scheme and just return the
credentials directly, or potentially put them in a private instance of
BasicCredentialsProvider, using the passed in AuthScope as the parameter to
setCredentials().
public Credentials getCredentials(AuthScope authscope) {
Credentials rval = delegate.getCredentials(authscope);
if (rval == null &&
AuthSchemes.DIGEST.equalsIgnoreCase(scheme)) }
...
delegate.setProvider(authscope,rval)
}
}
Hope this helps,
Mark
Disclaimer:
The opinions provided herein do not necessarily state or reflect those of
Donnell Systems, Inc.(DSI). DSI makes no warranty for and assumes no legal
liability or responsibility for the posting.
-----Original Message-----
From: Mop Sophia [mailto:[email protected]]
Sent: Monday, April 11, 2016 12:19 PM
To: [email protected]
Subject: Proxy with digest authentication
Hi,
I try to do a request using a proxy with digest authentication but the
authentication fails, here is the code :
// Proxy credentials
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope("80.1.2.3", 3128),
new UsernamePasswordCredentials("proxy_user", "proxy_pass")); HttpHost
proxy = new HttpHost("80.1.2.3", 3128);
CloseableHttpClient httpclient = HttpClients.custom()
.setSSLSocketFactory(sslsf)
.setDefaultCredentialsProvider(credsProvider)
.setProxy(proxy)
.build();
HttpGet httpget = new HttpGet("https://myhost.com:8443");
HttpClientContext context = HttpClientContext.create();
CloseableHttpResponse resp = httpclient.execute(httpget, context);
Log.d("TST", String.valueOf(resp.getStatusLine()));
Log.d("TST", EntityUtils.toString(resp.getEntity()));
AuthState proxyAuthState = context.getProxyAuthState(); Log.d("TST", "Proxy
auth state: " + proxyAuthState.getState()); Log.d("TST", "Proxy auth scheme: "
+ proxyAuthState.getAuthScheme()); Log.d("TST", "Proxy auth credentials: " +
proxyAuthState.getCredentials()); AuthState targetAuthState =
context.getTargetAuthState(); Log.d("TST", "Target auth state: " +
targetAuthState.getState()); Log.d("TST", "Target auth scheme: " +
targetAuthState.getAuthScheme()); Log.d("TST", "Target auth credentials: " +
targetAuthState.getCredentials());
Any idea, please ?
Thanks,
Stéphane