HttpAsyncClient 的简单使用

下载地址:http://hc.apache.org/downloads.cgi

在NetBeans中导入以下jar文件:

HttpAsyncClient 的简单使用

1:一次请求:

 public static void oneReuest(){

        final CloseableHttpAsyncClient httpClient = HttpAsyncClients.createDefault();

        httpClient.start();

        final HttpGet request = new HttpGet("http://www.apache.org/");

        final Future future = httpClient.execute(request, null);

        try {

            HttpResponse response = (HttpResponse) future.get();

            System.out.println("Response:" + response.getStatusLine());

            System.out.println("Shutting down");

        } catch (Exception ex) {

            Logger.getLogger(Httpasyncclient.class.getName()).log(Level.SEVERE, null, ex);

        }finally{

            try {

                httpClient.close();

            } catch (IOException ex) {

                Logger.getLogger(Httpasyncclient.class.getName()).log(Level.SEVERE, null, ex);

            }

        }

        

        System.out.println("执行完毕");

    }

2:多次异步请求:

 public static void moreRequest(){

        final RequestConfig requestConfitg = RequestConfig.custom()

                .setSocketTimeout(3000)

                .setConnectTimeout(3000).build();

        

        final CloseableHttpAsyncClient httpClient = HttpAsyncClients.custom()

                .setDefaultRequestConfig(requestConfitg)

                .build();

        

        httpClient.start();

        

        final HttpGet[] requests = new HttpGet[]{

            new HttpGet("http://www.apache.org/"),

            new HttpGet("http://www.baidu.com/"),

            new HttpGet("http://www.oschina.net/")

        };

        

        final CountDownLatch latch = new CountDownLatch(requests.length);

        for(final HttpGet request: requests){

            

                httpClient.execute(request, new FutureCallback(){

                    @Override

                    public void completed(Object obj) {

                       final HttpResponse response = (HttpResponse)obj;

                       latch.countDown();

                       System.out.println(request.getRequestLine() + "->" + response.getStatusLine());

                    }



                    @Override

                    public void failed(Exception excptn) {

                        latch.countDown();

                        System.out.println(request.getRequestLine() + "->" + excptn);

                    }



                    @Override

                    public void cancelled() {

                        latch.countDown();

                        System.out.println(request.getRequestLine() + "cancelled");

                    }

                });

         }       

        

        try {

            latch.await();

            System.out.println("Shutting Down");

        } catch (InterruptedException ex) {

            Logger.getLogger(Httpasyncclient.class.getName()).log(Level.SEVERE, null, ex);

        }finally{

            try {

                httpClient.close();

            } catch (IOException ex) {

                Logger.getLogger(Httpasyncclient.class.getName()).log(Level.SEVERE, null, ex);

            }

        }

        System.out.println("Finish!");

    }

运行结果:

run:

GET http://www.baidu.com/ HTTP/1.1->HTTP/1.1 200 OK

GET http://www.oschina.net/ HTTP/1.1->HTTP/1.1 200 OK

GET http://www.apache.org/ HTTP/1.1->HTTP/1.1 200 OK

Shutting Down

Finish!

成功构建 (总时间: 2 秒)

可以看出是异步执行的!不是按照我们传入的URL参数顺序执行的!

 

你可能感兴趣的:(client)