Java中對於httpClient的非同步請求處理
阿新 • • 發佈:2018-12-10
注意:使用這個前提要匯入相對應的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();