1. 程式人生 > >Java中對於httpClient的非同步請求處理

Java中對於httpClient的非同步請求處理

注意:使用這個前提要匯入相對應的jar包,這裡使用的是Apache的httpComponents;

直接在pom.xml檔案里加入:

<dependency>
   <groupId>org.apache.httpcomponents</groupId>
   <artifactId>httpasyncclient</artifactId>
   <version>4.1.1</version>
</dependency>
對應的測試用例:使用的方法
@Test
public void post
(){ CloseableHttpAsyncClient client = HttpAsyncClients.createDefault(); client.start(); final CountDownLatch latch = new CountDownLatch(1); final HttpPost post = new HttpPost(
url); //設定請求頭 這裡根據個人來定義 post.addHeader("Content-type", "application/json; charset=utf-8");
post.setHeader("Accept", "application/json"); //執行 client.execute(post, new FutureCallback<HttpResponse>() { //執行非同步操作 請求完成後 public void completed(final HttpResponse response) { latch.countDown(); //響應內容 int a = response.getStatusLine().getStatusCode()
; System.out.println("狀態碼:"+a); if (a == 200) { System.out.println("成功!"); } else { try {
                //輸出響內容
                   System.out.println(response.getStatusLine().getStatusCode()
                            + "  " + EntityUtils.toString(response.getEntity(), "UTF-8"));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        //請求失敗處理
        public void failed(final Exception ex) {
            latch.countDown();
        }

        //請求取消後處理
        public void cancelled() {
            latch.countDown();
        }

    });

    try {
        latch.await();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    //關閉
    try {
        client.close();
    } catch (IOException ignore) {

    }
}

這裡很要注意的是在 例項化得到client物件後一定要記得呼叫client.start();方法,這裡是和httpClient同步不一樣的地方!!

 CloseableHttpAsyncClient client = HttpAsyncClients.createDefault();