Apache HttpClient - Trình xử lý phản hồi

Nên xử lý phản hồi HTTP bằng trình xử lý phản hồi. Trong chương này, chúng ta sẽ thảo luận về cách tạo trình xử lý phản hồi và cách sử dụng chúng để xử lý phản hồi.

Nếu bạn sử dụng trình xử lý phản hồi, tất cả các kết nối HTTP sẽ được giải phóng tự động.

Tạo một trình xử lý phản hồi

API HttpClient cung cấp một giao diện được gọi là ResponseHandler trong gói org.apache.http.client. Để tạo một trình xử lý phản hồi, hãy triển khai giao diện này và ghi đè lên handleResponse() phương pháp.

Mọi phản hồi đều có mã trạng thái và nếu mã trạng thái nằm trong khoảng từ 200 đến 300, điều đó có nghĩa là hành động đã được nhận, hiểu và chấp nhận thành công. Do đó, trong ví dụ của chúng tôi, chúng tôi sẽ xử lý các thực thể của phản hồi với mã trạng thái như vậy.

Thực thi yêu cầu bằng trình xử lý phản hồi

Làm theo các bước dưới đây để thực hiện yêu cầu bằng cách sử dụng trình xử lý phản hồi.

Bước 1 - Tạo một đối tượng HttpClient

Các createDefault() phương pháp của HttpClients lớp trả về một đối tượng của lớp CloseableHttpClient, là triển khai cơ bản của HttpClientgiao diện. Sử dụng phương pháp này tạo một đối tượng HttpClient

CloseableHttpClient httpclient = HttpClients.createDefault();

Bước 2 - Khởi tạo Trình xử lý phản hồi

Khởi tạo đối tượng trình xử lý phản hồi được tạo ở trên bằng cách sử dụng dòng mã sau:

ResponseHandler<String> responseHandler = new MyResponseHandler();

Bước 3 - Tạo một đối tượng HttpGet

Các HttpGet lớp đại diện cho yêu cầu HTTP GET lấy thông tin của máy chủ đã cho bằng cách sử dụng URI.

Tạo một yêu cầu HttpGet bằng cách khởi tạo lớp HttpGet và bằng cách truyền một chuỗi đại diện cho URI dưới dạng tham số tới phương thức khởi tạo của nó.

ResponseHandler<String> responseHandler = new MyResponseHandler();

Bước 4 - Thực hiện yêu cầu Nhận bằng trình xử lý phản hồi

Các CloseableHttpClient lớp có một biến thể của execute() phương thức chấp nhận hai đối tượng ResponseHandler và HttpUriRequest, và trả về một đối tượng phản hồi.

String httpResponse = httpclient.execute(httpget, responseHandler);

Thí dụ

Ví dụ sau minh họa việc sử dụng trình xử lý phản hồi.

import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

class MyResponseHandler implements ResponseHandler<String>{
 
   public String handleResponse(final HttpResponse response) throws IOException{

      //Get the status of the response
      int status = response.getStatusLine().getStatusCode();
      if (status >= 200 && status < 300) {
         HttpEntity entity = response.getEntity();
         if(entity == null) {
            return "";
         } else {
            return EntityUtils.toString(entity);
         }

      } else {
         return ""+status;
      }
   }
}

public class ResponseHandlerExample {
   
   public static void main(String args[]) throws Exception{
 
      //Create an HttpClient object
      CloseableHttpClient httpclient = HttpClients.createDefault();

      //instantiate the response handler
      ResponseHandler<String> responseHandler = new MyResponseHandler();

      //Create an HttpGet object
      HttpGet httpget = new HttpGet("http://www.tutorialspoint.com/");

      //Execute the Get request by passing the response handler object and HttpGet object
      String httpresponse = httpclient.execute(httpget, responseHandler);

      System.out.println(httpresponse);
   }
}

Đầu ra

Các chương trình trên tạo ra kết quả sau:

<!DOCTYPE html>
<!--[if IE 8]><html class = "ie ie8"> <![endif]-->
<!--[if IE 9]><html class = "ie ie9"> <![endif]-->
<!--[if gt IE 9]><!-->
<html lang = "en-US"> <!--<![endif]-->
<head>
<!-- Basic -->
<meta charset = "utf-8">
<meta http-equiv = "X-UA-Compatible" content = "IE = edge">
<meta name = "viewport" content = "width = device-width,initial-scale = 1.0,userscalable = yes">
<link href = "https://cdn.muicss.com/mui-0.9.39/extra/mui-rem.min.css"
rel = "stylesheet" type = "text/css" />
<link rel = "stylesheet" href = "/questions/css/home.css?v = 3" />
<script src = "/questions/js/jquery.min.js"></script>
<script src = "/questions/js/fontawesome.js"></script>
<script src = "https://cdn.muicss.com/mui-0.9.39/js/mui.min.js"></script>
</head>
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-232293-17');
</script>
</body>