How to setup proxy authentication using Apache's httpclient
(Pre-authorization on proxy networks)
This answer uses Apache's HttpClient v4.1 and later.
The accepted answer didn't work for me, but I found something else that did!
Here's some tested, verified code from apache that demonstrates how to authenticate through a proxy for a HTTP request.
The full documentation is located here: https://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html .
There's also an excellent example from Apache here: https://hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/apache/http/examples/client/ClientProxyAuthentication.java
- Replace
my_username
with your proxy username
- Replace
my_password
with your proxy password
- Replace
proxy.mycompany.com
with your proxy host
- Replace
8080
with your proxy port
- Replace
google.com
with the host of the site that you want to send your HTTP request to.
- Replace
/some-path
with the path that you want to send the HTTP request to. This uses the host site you specified earlier (google.com).
The following example will authenticate username:[email protected]:8080
and send a GET
request to http://www.google.com/some-path
and will print the response HTTP code.
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();
}