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>