You can also have more control about the how the response is asynchronously processed by using a {@link AsyncHandler}AsyncHttpClient c = new AsyncHttpClient(); Futuref = c.prepareGet("http://www.ning.com/").execute(new AsyncCompletionHandler () { @Override public Response onCompleted(Response response) throws IOException { // Do something return response; } @Override public void onThrowable(Throwable t) { } }); Response response = f.get(); // We are just interested to retrieve the status code. Future f = c.prepareGet("http://www.ning.com/").execute(new AsyncCompletionHandler () { @Override public Integer onCompleted(Response response) throws IOException { // Do something return response.getStatusCode(); } @Override public void onThrowable(Throwable t) { } }); Integer statusCode = f.get();
This class can also be used without the need of {@link AsyncHandler}AsyncHttpClient c = new AsyncHttpClient(); Futuref = c.prepareGet("http://www.ning.com/").execute(new AsyncHandler () { private StringBuilder builder = new StringBuilder(); @Override public STATE onStatusReceived(HttpResponseStatus s) throws Exception { // return STATE.CONTINUE or STATE.ABORT return STATE.CONTINUE } @Override public STATE onHeadersReceived(HttpResponseHeaders bodyPart) throws Exception { // return STATE.CONTINUE or STATE.ABORT return STATE.CONTINUE } @Override public STATE onBodyPartReceived(HttpResponseBodyPart bodyPart) throws Exception { builder.append(new String(bodyPart)); // return STATE.CONTINUE or STATE.ABORT return STATE.CONTINUE } @Override public String onCompleted() throws Exception { // Will be invoked once the response has been fully read or a ResponseComplete exception // has been thrown. return builder.toString(); } @Override public void onThrowable(Throwable t) { } }); String bodyResponse = f.get();
Finally, you can configure the AsyncHttpClient using an {@link AsyncHttpClientConfig} instanceAsyncHttpClient c = new AsyncHttpClient(); Futuref = c.prepareGet(TARGET_URL).execute(); Response r = f.get();
An instance of this class will cache every HTTP 1.1 connections and close them when the {@link AsyncHttpClientConfig#getReadTimeout()}expires. This object can hold many persistent connections to different host.AsyncHttpClient c = new AsyncHttpClient(new AsyncHttpClientConfig.Builder().setRequestTimeoutInMs(...).build()); Futuref = c.prepareGet(TARGET_URL).execute(); Response r = f.get();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|