Рекомендуется обрабатывать ответы HTTP с использованием обработчиков ответов. В этой главе мы собираемся обсудить, как создавать обработчики ответов и как использовать их для обработки ответа.
Если вы используете обработчик ответа, все HTTP-соединения будут освобождены автоматически.
Создание обработчика ответа
HttpClient API предоставляет интерфейс, известный как ResponseHandler, в пакете org.apache.http.client. Чтобы создать обработчик ответа, реализуйте этот интерфейс и переопределите его метод handleResponse () .
Каждый ответ имеет код состояния, и если код состояния находится между 200 и 300, это означает, что действие было успешно получено, понято и принято. Поэтому в нашем примере мы будем обрабатывать сущности ответов с такими кодами состояния.
Выполнение запроса с использованием обработчика ответа
Выполните шаги, приведенные ниже, чтобы выполнить запрос, используя обработчик ответа.
Шаг 1 — Создание объекта HttpClient
Метод createDefault () класса HttpClients возвращает объект класса CloseableHttpClient , который является базовой реализацией интерфейса HttpClient . Используя этот метод, создайте объект HttpClient
CloseableHttpClient httpclient = HttpClients.createDefault();
Шаг 2 — Создание обработчика ответа
Создайте объект обработчика ответа, созданный выше, используя следующую строку кода:
ResponseHandler<String> responseHandler = new MyResponseHandler();
Шаг 3 — Создание объекта HttpGet
Класс HttpGet представляет HTTP-запрос GET, который извлекает информацию о данном сервере с использованием URI.
Создайте запрос HttpGet, создав экземпляр класса HttpGet и передав строку, представляющую URI, в качестве параметра его конструктору.
ResponseHandler<String> responseHandler = new MyResponseHandler();
Шаг 4 — Выполнить запрос Get с помощью обработчика ответа
Класс CloseableHttpClient имеет вариант метода execute (), который принимает два объекта ResponseHandler и HttpUriRequest и возвращает объект ответа.
String httpResponse = httpclient.execute(httpget, responseHandler);
пример
Следующий пример демонстрирует использование обработчиков ответов.
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); } }
Выход
Вышеуказанные программы генерируют следующий вывод —