Configuring a Proxy
The AsyncHttpClient library supports proxy, proxy authentication and proxy tunneling. Just need to create a ProxyServer instance:
AsyncHttpClient client = new AsyncHttpClient(); Future<Response> f = client.prepareGet("http://....) .setProxyServer(new ProxyServer("127.0.0.1", 8080)) .execute();
If you need to use an SSL tunnel, all you need to do is:
ProxyServer ps = new ProxyServer(ProxyServer.Protocol.HTTPS, "127.0.0.1", 8080); AsyncHttpClient asyncHttpClient = new AsyncHttpClient(); RequestBuilder rb = new RequestBuilder("GET") .setProxyServer(ps) .setUrl("https://twitpic.com:443"); Future responseFuture = asyncHttpClient.executeRequest(rb.build(), new AsyncCompletionHandlerBase() { @Override public void onThrowable(Throwable t) {} @Override public Response onCompleted(Response response) throws Exception { return response; } }); Response r = responseFuture.get();
You can also set the authentication token on the ProxyServer instance:
ProxyServer ps = new ProxyServer(ProxyServer.Protocol.HTTPS, "127.0.0.1", 8080, "admin", "password"); AsyncHttpClient asyncHttpClient = new AsyncHttpClient(); RequestBuilder rb = new RequestBuilder("GET") .setProxyServer(ps) .setUrl("https://twitpic.com:443"); Future responseFuture = asyncHttpClient.executeRequest(rb.build(), new AsyncCompletionHandlerBase() { @Override public void onThrowable(Throwable t) {} @Override public Response onCompleted(Response response) throws Exception { return response; } }); Response r = responseFuture.get();
You can also set the ProxyServer at the AsyncHttpClientConfig level. In that case, all request will share the same proxy information.