Apache HttpClient — Обзор
Протокол передачи гипертекста (HTTP) — это протокол прикладного уровня для распределенных, совместных, гипермедиа информационных систем. Это основа для обмена данными для Всемирной паутины (т.е. Интернета) с 1990 года. HTTP является универсальным протоколом и протоколом без сохранения состояния, который может использоваться для других целей, а также с использованием расширений его методов запроса, кодов ошибок и заголовков.
По сути, HTTP — это протокол связи на основе TCP / IP, который используется для доставки данных (файлы HTML, файлы изображений, результаты запросов и т. Д.) В World Wide Web. Порт по умолчанию — TCP 80, но можно использовать и другие порты. Он обеспечивает стандартизированный способ связи компьютеров друг с другом. Спецификация HTTP определяет, как данные запросов клиентов будут создаваться и отправляться на сервер, и как серверы отвечают на эти запросы.
Что такое Http-клиент
Http-клиент является библиотекой передачи, он находится на стороне клиента, отправляет и получает сообщения HTTP. Он обеспечивает современную, многофункциональную и эффективную реализацию, соответствующую современным стандартам HTTP.
В дополнение к этому, используя клиентскую библиотеку, можно создавать приложения на основе HTTP, такие как веб-браузеры, клиенты веб-служб и т. Д.
Особенности Http Client
Ниже приведены основные характеристики клиента Http —
-
Библиотека HttpClient реализует все доступные методы HTTP.
-
Библиотека HttpClient предоставляет API для защиты запросов с использованием протокола Secure Socket Layer.
-
Используя HttpClient, вы можете устанавливать соединения, используя прокси.
-
Вы можете аутентифицировать соединения, используя схемы аутентификации, такие как Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session и т. Д.
-
Библиотека HttpClient поддерживает отправку запросов через несколько потоков. Он управляет несколькими соединениями, установленными из разных потоков, используя ClientConnectionPoolManager .
-
Используя библиотеку Apache HttpClient, вы можете установить время ожидания подключения.
Библиотека HttpClient реализует все доступные методы HTTP.
Библиотека HttpClient предоставляет API для защиты запросов с использованием протокола Secure Socket Layer.
Используя HttpClient, вы можете устанавливать соединения, используя прокси.
Вы можете аутентифицировать соединения, используя схемы аутентификации, такие как Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session и т. Д.
Библиотека HttpClient поддерживает отправку запросов через несколько потоков. Он управляет несколькими соединениями, установленными из разных потоков, используя ClientConnectionPoolManager .
Используя библиотеку Apache HttpClient, вы можете установить время ожидания подключения.
Apache HttpClient — Настройка среды
В этой главе мы объясним, как настроить среду для HttpClient в Eclipse IDE. Прежде чем продолжить установку, убедитесь, что в вашей системе уже установлен Eclipse. Если нет, скачайте и установите Eclipse.
Для получения дополнительной информации об Eclipse, пожалуйста, обратитесь к нашему учебному пособию по Eclipse .
Шаг 1 — Загрузите JAR-файл зависимости
Откройте официальную домашнюю страницу сайта HttpClient (компоненты) и перейдите на страницу загрузки
Затем загрузите последнюю стабильную версию HttpClient . Здесь, на протяжении всего урока, мы используем версию 4.5.6, поэтому скачиваем файл 4.5.6.zip .
В загруженной папке вы найдете папку с именем lib, которая содержит необходимые файлы Jar, которые необходимо добавить в путь к классам вашего проекта для работы с HttpClient.
Шаг 2 — Создайте проект и установите путь сборки
Откройте затмение и создайте пример проекта. Щелкните правой кнопкой мыши по проекту и выберите опцию Build Path → Configure Build Path, как показано ниже.
Во фрейме пути сборки Java на вкладке « Библиотеки » нажмите « Добавить внешние JAR-файлы» .
И выберите все файлы jar в папке lib и нажмите « Применить и закрыть» .
Все готово для работы с библиотекой HttpClient в eclipse.
Apache HttpClient — Http Получить запрос
Метод GET используется для получения информации с данного сервера с использованием заданного URI. Запросы с использованием GET должны только извлекать данные и не должны оказывать никакого другого влияния на данные.
HttpClient API предоставляет класс с именем HttpGet, который представляет метод запроса get.
Следуйте приведенным ниже инструкциям, чтобы отправить запрос на получение с помощью библиотеки HttpClient.
Шаг 1 — Создайте объект HttpClient
Метод createDefault () класса HttpClients возвращает объект CloseableHttpClient , который является базовой реализацией интерфейса HttpClient .
Используя этот метод, создайте объект HttpClient, как показано ниже —
CloseableHttpClient httpclient = HttpClients.createDefault();
Шаг 2. Создание объекта HttpGet.
Класс HttpGet представляет запрос HTTPGET, который получает информацию о заданном сервере, используя URI.
Создайте запрос HTTP GET, создав экземпляр этого класса. Конструктор этого класса принимает значение String, представляющее URI.
HttpGet httpget = new HttpGet("http://www.tutorialspoint.com/");
Шаг 3 — Выполнить запрос на получение
Метод execute () класса CloseableHttpClient принимает объект HttpUriRequest (interface) (т. Е. HttpGet, HttpPost, HttpPut, HttpHead и т. Д.) И возвращает объект ответа.
Выполните запрос, используя этот метод, как показано ниже —
HttpResponse httpresponse = httpclient.execute(httpget);
пример
Ниже приведен пример, демонстрирующий выполнение HTTP-запроса GET с использованием библиотеки HttpClient.
import java.util.Scanner; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; public class HttpGetExample { public static void main(String args[]) throws Exception{ //Creating a HttpClient object CloseableHttpClient httpclient = HttpClients.createDefault(); //Creating a HttpGet object HttpGet httpget = new HttpGet("https://www.tutorialspoint.com/ "); //Printing the method used System.out.println("Request Type: "+httpget.getMethod()); //Executing the Get request HttpResponse httpresponse = httpclient.execute(httpget); Scanner sc = new Scanner(httpresponse.getEntity().getContent()); //Printing the status line System.out.println(httpresponse.getStatusLine()); while(sc.hasNext()) { System.out.println(sc.nextLine()); } } }
Выход
Вышеуказанная программа генерирует следующий вывод —
Request Type: GET <!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"> <title>Parallax Scrolling, Java Cryptography, YAML, Python Data Science, Java i18n, GitLab, TestRail, VersionOne, DBUtils, Common CLI, Seaborn, Ansible, LOLCODE, Current Affairs 2018, Apache Commons Collections</title> <meta name = "Description" content = "Parallax Scrolling, Java Cryptography, YAML, Python Data Science, Java i18n, GitLab, TestRail, VersionOne, DBUtils, Common CLI, Seaborn, Ansible, LOLCODE, Current Affairs 2018, Intellij Idea, Apache Commons Collections, Java 9, GSON, TestLink, Inter Process Communication (IPC), Logo, PySpark, Google Tag Manager, Free IFSC Code, SAP Workflow"/> <meta name = "Keywords" content = "Python Data Science, Java i18n, GitLab, TestRail, VersionOne, DBUtils, Common CLI, Seaborn, Ansible, LOLCODE, Gson, TestLink, Inter Process Communication (IPC), Logo"/> <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> </body> </html>
Apache HttpClient — Http Post Request
POST-запрос используется для отправки данных на сервер; например, информация о клиенте, загрузка файла и т. д. с использованием HTML-форм.
HttpClient API предоставляет класс с именем HttpPost, который представляет запрос POST.
Следуйте приведенным ниже инструкциям, чтобы отправить запрос HTTP POST с использованием библиотеки HttpClient.
Шаг 1 — Создание объекта HttpClient
Метод createDefault () класса HttpClients возвращает объект класса CloseableHttpClient , который является базовой реализацией интерфейса HttpClient .
Используя этот метод, создайте объект HttpClient.
CloseableHttpClient httpClient = HttpClients.createDefault();
Шаг 2 — Создание объекта HttpPost
Класс HttpPost представляет запрос HTTP POST . Это отправляет необходимые данные и извлекает информацию о данном сервере, используя URI.
Создайте этот запрос путем создания экземпляра класса HttpPost и передачи строкового значения, представляющего URI, в качестве параметра его конструктору.
HttpGet httpGet = new HttpGet("http://www.tutorialspoint.com/");
Шаг 3 — Выполнить запрос на получение
Метод execute () объекта CloseableHttpClient принимает объект HttpUriRequest (interface) (т. Е. HttpGet, HttpPost, HttpPut, HttpHead и т. Д.) И возвращает объект ответа.
HttpResponse httpResponse = httpclient.execute(httpget);
пример
Ниже приведен пример, демонстрирующий выполнение HTTP-запроса POST с использованием библиотеки HttpClient.
import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; public class HttpPostExample { public static void main(String args[]) throws Exception{ //Creating a HttpClient object CloseableHttpClient httpclient = HttpClients.createDefault(); //Creating a HttpGet object HttpPost httppost = new HttpPost("https://www.tutorialspoint.com/"); //Printing the method used System.out.println("Request Type: "+httppost.getMethod()); //Executing the Get request HttpResponse httpresponse = httpclient.execute(httppost); Scanner sc = new Scanner(httpresponse.getEntity().getContent()); //Printing the status line System.out.println(httpresponse.getStatusLine()); while(sc.hasNext()) { System.out.println(sc.nextLine()); } } }
Выход
Вышеуказанная программа генерирует следующий вывод.
Request Type: POST <!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"> <title>Parallax Scrolling, Java Cryptography, YAML, Python Data Science, Java i18n, GitLab, TestRail, VersionOne, DBUtils, Common CLI, Seaborn, Ansible, LOLCODE, Current Affairs 2018, Apache Commons Collections</title> <meta name = "Description" content = "Parallax Scrolling, Java Cryptography, YAML, Python Data Science, Java i18n, GitLab, TestRail, VersionOne, DBUtils, Common CLI, Seaborn, Ansible, LOLCODE, Current Affairs 2018, Intellij Idea, Apache Commons Collections, Java 9, GSON, TestLink, Inter Process Communication (IPC), Logo, PySpark, Google Tag Manager, Free IFSC Code, SAP Workflow"/> <meta name = "Keywords" content="Python Data Science, Java i18n, GitLab, TestRail, VersionOne, DBUtils, Common CLI, Seaborn, Ansible, LOLCODE, Gson, TestLink, Inter Process Communication (IPC), Logo"/> <meta http-equiv = "X-UA-Compatible" content = "IE = edge"> <meta name = "viewport" conten t= "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> </body> </html>
Apache HttpClient — обработчики ответов
Рекомендуется обрабатывать ответы 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); } }
Выход
Вышеуказанные программы генерируют следующий вывод —
<!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>
Apache HttpClient — закрытие соединения
Если вы обрабатываете HTTP-ответы вручную, а не используете обработчик ответов, вам необходимо закрыть все http-соединения самостоятельно. В этой главе объясняется, как закрыть соединения вручную.
При закрытии HTTP-соединений вручную следуйте инструкциям ниже:
Шаг 1 — Создайте объект HttpClient
Метод createDefault () класса HttpClients возвращает объект класса CloseableHttpClient , который является базовой реализацией интерфейса HttpClient.
Используя этот метод, создайте объект HttpClient, как показано ниже —
CloseableHttpClient httpClient = HttpClients.createDefault();
Шаг 2 — Запустите блок try-finally
Запустите блок try-finally, запишите оставшийся код в программах в блоке try и закройте объект CloseableHttpClient в блоке finally.
CloseableHttpClient httpClient = HttpClients.createDefault(); try{ //Remaining code . . . . . . . . . . . . . . . }finally{ httpClient.close(); }
Шаг 3 — Создание HttpGetobject
Класс HttpGet представляет HTTP-запрос GET, который извлекает информацию о данном сервере с использованием URI.
Создайте HTTP-запрос GET, создав экземпляр класса HttpGet, передав строку, представляющую URI.
HttpGet httpGet = new HttpGet("http://www.tutorialspoint.com/");
Шаг 4 — Выполнить запрос Get
Метод execute () объекта CloseableHttpClient принимает объект HttpUriRequest (interface) (т. Е. HttpGet, HttpPost, HttpPut, HttpHead и т. Д.) И возвращает объект ответа.
Выполнить запрос, используя данный метод —
HttpResponse httpResponse = httpclient.execute(httpGet);
Шаг 5 — Запустите еще одну (вложенную) попытку
Запустите другой блок try-finally (вложенный в предыдущий блок try-finally), запишите оставшийся код в программах этого блока try и закройте объект HttpResponse в блоке finally.
CloseableHttpClient httpclient = HttpClients.createDefault(); try{ . . . . . . . . . . . . . . CloseableHttpResponse httpresponse = httpclient.execute(httpget); try{ . . . . . . . . . . . . . . }finally{ httpresponse.close(); } }finally{ httpclient.close(); }
пример
Всякий раз, когда вы создаете / получаете объекты, такие как запрос, поток ответов и т. Д., Начинайте блок try finally на следующей строке, пишите оставшийся код в блоке try и закрывайте соответствующий объект в блоке finally, как показано в следующей программе:
import java.util.Scanner; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; public class CloseConnectionExample { public static void main(String args[])throws Exception{ //Create an HttpClient object CloseableHttpClient httpclient = HttpClients.createDefault(); try{ //Create an HttpGet object HttpGet httpget = new HttpGet("http://www.tutorialspoint.com/"); //Execute the Get request CloseableHttpResponse httpresponse = httpclient.execute(httpget); try{ Scanner sc = new Scanner(httpresponse.getEntity().getContent()); while(sc.hasNext()) { System.out.println(sc.nextLine()); } }finally{ httpresponse.close(); } }finally{ httpclient.close(); } } }
Выход
При выполнении вышеупомянутой программы генерируется следующий вывод:
<!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> </html>
Apache HttpClient — прерывание запроса
Вы можете прервать текущий HTTP-запрос, используя метод abort () , т. Е. После вызова этого метода для определенного запроса его выполнение будет прервано.
Если этот метод вызывается после одного выполнения, ответы этого выполнения не будут затронуты, и последующие выполнения будут прерваны.
пример
Если вы посмотрите на следующий пример, мы создали запрос HttpGet, распечатали формат запроса, используемый с помощью getMethod () .
Затем мы выполнили еще одно выполнение с тем же запросом. Напечатал строку состояния снова, используя 1- е исполнение. Наконец, печатается строка состояния второго исполнения.
Как обсуждалось, ответы 1- го исполнения (выполнение перед методом прерывания) печатаются (включая вторую строку состояния, которая записывается после метода прерывания), и все последующие исполнения текущего запроса после метода прерывания завершаются неудачно, вызывая исключение.
import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; public class HttpGetExample { public static void main(String args[]) throws Exception{ //Creating an HttpClient object CloseableHttpClient httpclient = HttpClients.createDefault(); //Creating an HttpGet object HttpGet httpget = new HttpGet("http://www.tutorialspoint.com/"); //Printing the method used System.out.println(httpget.getMethod()); //Executing the Get request HttpResponse httpresponse = httpclient.execute(httpget); //Printing the status line System.out.println(httpresponse.getStatusLine()); httpget.abort(); System.out.println(httpresponse.getEntity().getContentLength()); //Executing the Get request HttpResponse httpresponse2 = httpclient.execute(httpget); System.out.println(httpresponse2.getStatusLine()); } }
Выход
При выполнении вышеупомянутая программа генерирует следующий вывод —
On executing, the above program generates the following output. GET HTTP/1.1 200 OK -1 Exception in thread "main" org.apache.http.impl.execchain.RequestAbortedException: Request aborted at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:180) at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185) at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108) at HttpGetExample.main(HttpGetExample.java:32)
Apache HttpClient — перехватчики
Перехватчики — это те, которые помогают блокировать или изменять запросы или ответы. Протокол-перехватчики обычно действуют на определенный заголовок или группу связанных заголовков. Библиотека HttpClient обеспечивает поддержку перехватчиков.
Запрос перехватчика
Интерфейс HttpRequestInterceptor представляет перехватчики запросов. Этот интерфейс содержит метод, известный как процесс, в котором вам нужно написать кусок кода для перехвата запросов.
На стороне клиента этот метод проверяет / обрабатывает запросы перед их отправкой на сервер, а на стороне сервера этот метод выполняется перед оценкой тела запроса.
Создание запроса-перехватчика
Вы можете создать перехватчик запроса, выполнив шаги, указанные ниже.
Шаг 1 — Создание объекта HttpRequestInterceptor
Создайте объект интерфейса HttpRequestInterceptor, реализовав его абстрактный метод process.
HttpRequestInterceptor requestInterceptor = new HttpRequestInterceptor() {
@Override public void process(HttpRequest request, HttpContext context) throws HttpException, IOException { //Method implementation . . . . . };
Шаг 2. Создание объекта CloseableHttpClient
Создайте пользовательский объект CloseableHttpClient , добавив к нему созданный выше перехватчик, как показано ниже —
//Creating a CloseableHttpClient object CloseableHttpClient httpclient = HttpClients. custom() .addInterceptorFirst(requestInterceptor).build();
Используя этот объект, вы можете выполнять запросы как обычно.
пример
Следующий пример демонстрирует использование перехватчиков запросов. В этом примере мы создали объект запроса HTTP GET и добавили к нему три заголовка: sample-header, demoheader и test-header.
В методе processor () перехватчика мы проверяем заголовки отправленного запроса; если какой-либо из этих заголовков является sample-header , мы пытаемся удалить его и отобразить список заголовков этого конкретного запроса.
import java.io.IOException; import org.apache.http.Header; import org.apache.http.HttpException; import org.apache.http.HttpRequest; import org.apache.http.HttpRequestInterceptor; import org.apache.http.HttpResponse; 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.message.BasicHeader; import org.apache.http.protocol.HttpContext; public class InterceptorsExample { public static void main(String args[]) throws Exception{ //Creating an HttpRequestInterceptor HttpRequestInterceptor requestInterceptor = new HttpRequestInterceptor() { @Override public void process(HttpRequest request, HttpContext context) throws HttpException, IOException { if(request.containsHeader("sample-header")) { System.out.println("Contains header sample-header, removing it.."); request.removeHeaders("sample-header"); } //Printing remaining list of headers Header[] headers= request.getAllHeaders(); for (int i = 0; i<headers.length;i++) { System.out.println(headers[i].getName()); } } }; //Creating a CloseableHttpClient object CloseableHttpClient httpclient = HttpClients. custom() .addInterceptorFirst(requestInterceptor).build(); //Creating a request object HttpGet httpget1 = new HttpGet("https://www.tutorialspoint.com/"); //Setting the header to it httpget1.setHeader(new BasicHeader("sample-header","My first header")); httpget1.setHeader(new BasicHeader("demo-header","My second header")); httpget1.setHeader(new BasicHeader("test-header","My third header")); //Executing the request HttpResponse httpresponse = httpclient.execute(httpget1); //Printing the status line System.out.println(httpresponse.getStatusLine()); } }
Выход
При выполнении вышеупомянутой программы генерируется следующий вывод:
Contains header sample-header, removing it.. demo-header test-header HTTP/1.1 200 OK
Ответ перехватчик
Интерфейс HttpResponseInterceptor представляет перехватчики ответа. Этот интерфейс содержит метод, известный как process () . В этом методе вам нужно написать кусок кода для перехвата ответов.
На стороне сервера этот метод проверяет / обрабатывает ответ перед отправкой его клиенту, а на стороне клиента этот метод выполняется перед оценкой тела ответа.
Создание ответного перехватчика
Вы можете создать перехватчик ответа, выполнив следующие шаги:
Шаг 1 — Создание объекта HttpResponseInterceptor
Создайте объект интерфейса HttpResponseInterceptor , реализовав его абстрактный метод процесса .
HttpResponseInterceptor responseInterceptor = new HttpResponseInterceptor() { @Override public void process(HttpResponse response, HttpContext context) throws HttpException, IOException { //Method implementation . . . . . . . . } };
Шаг 2: создание объекта CloseableHttpClient
Создайте пользовательский объект CloseableHttpClient , добавив к нему созданный выше перехватчик, как показано ниже —
//Creating a CloseableHttpClient object CloseableHttpClient httpclient = HttpClients.custom().addInterceptorFirst(responseInterceptor).build();
Используя этот объект, вы можете выполнять запросы как обычно.
пример
В следующем примере демонстрируется использование перехватчиков ответа. В этом примере мы добавили три ответа: образец заголовка, демо-заголовок и тестовый заголовок к ответу в процессоре.
После выполнения запроса и получения ответа мы распечатали имена всех заголовков ответа, используя метод getAllHeaders () .
И в выводе вы можете наблюдать имена трех заголовков в списке.
import java.io.IOException; import org.apache.http.Header; import org.apache.http.HttpException; import org.apache.http.HttpResponse; import org.apache.http.HttpResponseInterceptor; 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.protocol.HttpContext; public class ResponseInterceptorsExample { public static void main(String args[]) throws Exception{ //Creating an HttpRequestInterceptor HttpResponseInterceptor responseInterceptor = new HttpResponseInterceptor() { @Override public void process(HttpResponse response, HttpContext context) throws HttpException, IOException { System.out.println("Adding header sample_header, demo-header, test_header to the response"); response.setHeader("sample-header", "My first header"); response.setHeader("demo-header", "My second header"); response.setHeader("test-header", "My third header"); } }; //Creating a CloseableHttpClient object CloseableHttpClient httpclient = HttpClients.custom().addInterceptorFirst(responseInterceptor).build(); //Creating a request object HttpGet httpget1 = new HttpGet("https://www.tutorialspoint.com/"); //Executing the request HttpResponse httpresponse = httpclient.execute(httpget1); //Printing remaining list of headers Header[] headers = httpresponse.getAllHeaders(); for (int i = 0; i<headers.length;i++) { System.out.println(headers[i].getName()); } } }
Выход
При выполнении вышеупомянутая программа генерирует следующий результат —
On executing the above program generates the following output. Adding header sample_header, demo-header, test_header to the response Accept-Ranges Access-Control-Allow-Headers Access-Control-Allow-Origin Cache-Control Content-Type Date Expires Last-Modified Server Vary X-Cache sample-header demo-header test-header
Apache HttpClient — аутентификация пользователя
Используя HttpClient, вы можете подключиться к веб-сайту, который нуждался в имени пользователя и пароле. В этой главе объясняется, как выполнить клиентский запрос к сайту, который запрашивает имя пользователя и пароль.
Шаг 1 — Создание объекта CredentialsProvider
Интерфейс CredentialsProvider поддерживает коллекцию для хранения учетных данных пользователя. Вы можете создать его объект, создав экземпляр класса BasicCredentialsProvider , который является реализацией этого интерфейса по умолчанию.
CredentialsProvider credentialsPovider = new BasicCredentialsProvider();
Шаг 2 — Установите учетные данные
Вы можете установить необходимые учетные данные для объекта CredentialsProvider, используя метод setCredentials () .
Этот метод принимает два объекта, как указано ниже —
-
Объект AuthScope — область аутентификации, в которой указываются такие данные, как имя хоста, номер порта и имя схемы аутентификации.
-
Объект учетных данных — указание учетных данных (имя пользователя, пароль).
Объект AuthScope — область аутентификации, в которой указываются такие данные, как имя хоста, номер порта и имя схемы аутентификации.
Объект учетных данных — указание учетных данных (имя пользователя, пароль).
Установите учетные данные, используя метод setCredentials () для хоста и прокси, как показано ниже —
credsProvider.setCredentials(new AuthScope("example.com", 80), new UsernamePasswordCredentials("user", "mypass")); credsProvider.setCredentials(new AuthScope("localhost", 8000), new UsernamePasswordCredentials("abc", "passwd"));
Шаг 3 — Создайте объект HttpClientBuilder
Создайте HttpClientBuilder, используя метод custom () класса HttpClients .
//Creating the HttpClientBuilder HttpClientBuilder clientbuilder = HttpClients.custom();
Шаг 4 — Установите учетные данныеPovider
Вы можете установить созданный выше объект credentialsPovider в HttpClientBuilder, используя метод setDefaultCredentialsProvider () .
Задайте объект CredentialProvider, созданный на предыдущем шаге, для построителя клиента, передав его методу объекта CredentialsProvider (), как показано ниже.
clientbuilder = clientbuilder.setDefaultCredentialsProvider(credsProvider);
Шаг 5 — Создайте CloseableHttpClient
Создайте объект CloseableHttpClient, используя метод build () класса HttpClientBuilder .
CloseableHttpClient httpclient = clientbuilder.build()
Шаг 6 — Создайте объект HttpGet и выполните его
Создайте объект HttpRequest, создав экземпляр класса HttpGet. Выполните этот запрос, используя метод execute () .
//Creating a HttpGet object HttpGet httpget = new HttpGet("https://www.tutorialspoint.com/ "); //Executing the Get request HttpResponse httpresponse = httpclient.execute(httpget);
пример
Ниже приведен пример программы, которая демонстрирует выполнение HTTP-запроса к целевому сайту, который требует аутентификации пользователя.
import org.apache.http.Header; import org.apache.http.HttpResponse; import org.apache.http.auth.AuthScope; import org.apache.http.auth.Credentials; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClients; public class UserAuthenticationExample { public static void main(String args[]) throws Exception{ //Create an object of credentialsProvider CredentialsProvider credentialsPovider = new BasicCredentialsProvider(); //Set the credentials AuthScope scope = new AuthScope("https://www.tutorialspoint.com/questions/", 80); Credentials credentials = new UsernamePasswordCredentials("USERNAME", "PASSWORD"); credentialsPovider.setCredentials(scope,credentials); //Creating the HttpClientBuilder HttpClientBuilder clientbuilder = HttpClients.custom(); //Setting the credentials clientbuilder = clientbuilder.setDefaultCredentialsProvider(credentialsPovider); //Building the CloseableHttpClient object CloseableHttpClient httpclient = clientbuilder.build(); //Creating a HttpGet object HttpGet httpget = new HttpGet("https://www.tutorialspoint.com/questions/index.php"); //Printing the method used System.out.println(httpget.getMethod()); //Executing the Get request HttpResponse httpresponse = httpclient.execute(httpget); //Printing the status line System.out.println(httpresponse.getStatusLine()); int statusCode = httpresponse.getStatusLine().getStatusCode(); System.out.println(statusCode); Header[] headers= httpresponse.getAllHeaders(); for (int i = 0; i<headers.length;i++) { System.out.println(headers[i].getName()); } } }
Выход
При выполнении вышеупомянутая программа генерирует следующий вывод.
GET HTTP/1.1 200 OK 200
Apache HttpClient — Использование прокси
Прокси-сервер является промежуточным сервером между клиентом и Интернетом. Прокси-серверы предлагают следующие основные функции —
-
Межсетевой экран и сетевая фильтрация данных
-
Совместное использование сетевого подключения
-
Кеширование данных
Межсетевой экран и сетевая фильтрация данных
Совместное использование сетевого подключения
Кеширование данных
Используя библиотеку HttpClient, вы можете отправить HTTP-запрос через прокси. Следуйте инструкциям ниже
Шаг 1 — Создайте объект HttpHost
Создайте экземпляр класса HttpHost пакета org.apache.http , передав строковый параметр, представляющий имя прокси-хоста (от которого вам нужно отправить запросы) его конструктору.
//Creating an HttpHost object for proxy HttpHost proxyHost = new HttpHost("localhost");
Таким же образом создайте еще один объект HttpHost для представления целевого хоста, на который необходимо отправлять запросы.
//Creating an HttpHost object for target HttpHost targetHost = new HttpHost("google.com");
Шаг 2 — Создание объекта HttpRoutePlanner
Интерфейс HttpRoutePlanner вычисляет маршрут к указанному хосту. Создайте объект этого интерфейса, создав экземпляр класса DefaultProxyRoutePlanner , который является реализацией этого интерфейса. В качестве параметра его конструктору передайте созданный выше прокси-хост —
//creating a RoutePlanner object HttpRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxyhost);
Шаг 3 — Установите планировщик маршрута для строителя клиента
Используя метод custom () класса HttpClients , создайте объект HttpClientBuilder и установите для этого объекта планировщик маршрутов, созданный выше, с помощью метода setRoutePlanner () .
//Setting the route planner to the HttpClientBuilder object HttpClientBuilder clientBuilder = HttpClients.custom(); clientBuilder = clientBuilder.setRoutePlanner(routePlanner);
Шаг 4 — Постройте объект CloseableHttpClient
Создайте объект CloseableHttpClient , вызвав метод build () .
//Building a CloseableHttpClient CloseableHttpClient httpClient = clientBuilder.build();
Шаг 5 — Создать HttpGetobject
Создайте HTTP-запрос GET, создав экземпляр класса HttpGet .
//Creating an HttpGet object HttpGet httpGet = new HttpGet("/");
Шаг 6 — Выполнить запрос
Один из вариантов метода execute () принимает объекты HttpHost и HttpRequest и выполняет запрос. Выполнить запрос, используя этот метод —
//Executing the Get request HttpResponse httpResponse = httpclient.execute(targetHost, httpGet);
пример
В следующем примере показано, как отправить HTTP-запрос на сервер через прокси. В этом примере мы отправляем HTTP-запрос GET на google.com через localhost. Мы напечатали заголовки ответа и текст ответа.
import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.conn.routing.HttpRoutePlanner; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.DefaultProxyRoutePlanner; import org.apache.http.util.EntityUtils; public class RequestViaProxyExample { public static void main(String args[]) throws Exception{ //Creating an HttpHost object for proxy HttpHost proxyhost = new HttpHost("localhost"); //Creating an HttpHost object for target HttpHost targethost = new HttpHost("google.com"); //creating a RoutePlanner object HttpRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxyhost); //Setting the route planner to the HttpClientBuilder object HttpClientBuilder clientBuilder = HttpClients.custom(); clientBuilder = clientBuilder.setRoutePlanner(routePlanner); //Building a CloseableHttpClient CloseableHttpClient httpclient = clientBuilder.build(); //Creating an HttpGet object HttpGet httpget = new HttpGet("/"); //Executing the Get request HttpResponse httpresponse = httpclient.execute(targethost, httpget); //Printing the status line System.out.println(httpresponse.getStatusLine()); //Printing all the headers of the response Header[] headers = httpresponse.getAllHeaders(); for (int i = 0; i < headers.length; i++) { System.out.println(headers[i]); } //Printing the body of the response HttpEntity entity = httpresponse.getEntity(); if (entity != null) { System.out.println(EntityUtils.toString(entity)); } } }
Выход
При выполнении вышеупомянутая программа генерирует следующий вывод —
HTTP/1.1 200 OK Date: Sun, 23 Dec 2018 10:21:47 GMT Server: Apache/2.4.9 (Win64) PHP/5.5.13 Last-Modified: Tue, 24 Jun 2014 10:46:24 GMT ETag: "2e-4fc92abc3c000" Accept-Ranges: bytes Content-Length: 46 Content-Type: text/html <html><body><h1>It works!</h1></body></html>
Apache HttpClient — прокси-аутентификация
В этой главе мы узнаем, как создать HttpRequest, аутентифицированный с использованием имени пользователя и пароля, и туннелировать его через прокси-сервер к целевому хосту, используя пример.
Шаг 1 — Создание объекта CredentialsProvider
Интерфейс CredentialsProvider поддерживает коллекцию для хранения учетных данных пользователя. Вы можете создать его объект, создав экземпляр класса BasicCredentialsProvider, который является реализацией этого интерфейса по умолчанию.
CredentialsProvider credentialsPovider = new BasicCredentialsProvider();
Шаг 2 — Установите учетные данные
Вы можете установить необходимые учетные данные для объекта CredentialsProvider, используя метод setCredentials () . Этот метод принимает два объекта —
-
Объект AuthScope — область аутентификации, в которой указываются такие данные, как имя хоста, номер порта и имя схемы аутентификации.
-
Объект учетных данных — указание учетных данных (имя пользователя, пароль). Установите учетные данные, используя метод setCredentials () для хоста и прокси, как показано ниже.
Объект AuthScope — область аутентификации, в которой указываются такие данные, как имя хоста, номер порта и имя схемы аутентификации.
Объект учетных данных — указание учетных данных (имя пользователя, пароль). Установите учетные данные, используя метод setCredentials () для хоста и прокси, как показано ниже.
credsProvider.setCredentials(new AuthScope("example.com", 80), new UsernamePasswordCredentials("user", "mypass")); credsProvider.setCredentials(new AuthScope("localhost", 8000), new UsernamePasswordCredentials("abc", "passwd"));
Шаг 3 — Создайте объект HttpClientBuilder
Создайте HttpClientBuilder, используя метод custom () класса HttpClients, как показано ниже —
//Creating the HttpClientBuilder HttpClientBuilder clientbuilder = HttpClients.custom();
Шаг 4 — Установите CredentialsProvider
Вы можете установить объект CredentialsProvider в объект HttpClientBuilder, используя метод setDefaultCredentialsProvider () . Передайте ранее созданный объект CredentialsProvider этому методу.
clientbuilder = clientbuilder.setDefaultCredentialsProvider(credsProvider);
Шаг 5 — Создайте CloseableHttpClient
Создайте объект CloseableHttpClient, используя метод build () .
CloseableHttpClient httpclient = clientbuilder.build();
Шаг 6 — Создайте прокси и целевые хосты
Создайте целевой и прокси-хосты, создав экземпляр класса HttpHost .
//Creating the target and proxy hosts HttpHost target = new HttpHost("example.com", 80, "http"); HttpHost proxy = new HttpHost("localhost", 8000, "http");
Шаг 7 — Установите прокси и создайте объект RequestConfig
Создайте объект RequestConfig.Builder, используя метод custom () . Установите ранее созданный объект proxyHost в RequestConfig.Builder, используя метод setProxy () . Наконец, создайте объект RequestConfig, используя метод build () .
RequestConfig.Builder reqconfigconbuilder= RequestConfig.custom(); reqconfigconbuilder = reqconfigconbuilder.setProxy(proxyHost); RequestConfig config = reqconfigconbuilder.build();
Шаг 8 — Создайте объект запроса HttpGet и установите для него объект конфигурации.
Создайте объект HttpGet, создав экземпляр класса HttpGet. Задайте для этого объекта конфигурации, созданного на предыдущем шаге, метод setConfig () .
//Create the HttpGet request object HttpGet httpGet = new HttpGet("/"); //Setting the config to the request httpget.setConfig(config);
Шаг 9 — Выполнить запрос
Выполните запрос, передав объект HttpHost (цель) и запрос (HttpGet) в качестве параметров методу execute () .
HttpResponse httpResponse = httpclient.execute(targetHost, httpget);
пример
В следующем примере показано, как выполнить HTTP-запрос через прокси-сервер, используя имя пользователя и пароль.
import org.apache.http.HttpHost; import org.apache.http.HttpResponse; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClients; public class ProxyAuthenticationExample { public static void main(String[] args) throws Exception { //Creating the CredentialsProvider object CredentialsProvider credsProvider = new BasicCredentialsProvider(); //Setting the credentials credsProvider.setCredentials(new AuthScope("example.com", 80), new UsernamePasswordCredentials("user", "mypass")); credsProvider.setCredentials(new AuthScope("localhost", 8000), new UsernamePasswordCredentials("abc", "passwd")); //Creating the HttpClientBuilder HttpClientBuilder clientbuilder = HttpClients.custom(); //Setting the credentials clientbuilder = clientbuilder.setDefaultCredentialsProvider(credsProvider); //Building the CloseableHttpClient object CloseableHttpClient httpclient = clientbuilder.build(); //Create the target and proxy hosts HttpHost targetHost = new HttpHost("example.com", 80, "http"); HttpHost proxyHost = new HttpHost("localhost", 8000, "http"); //Setting the proxy RequestConfig.Builder reqconfigconbuilder= RequestConfig.custom(); reqconfigconbuilder = reqconfigconbuilder.setProxy(proxyHost); RequestConfig config = reqconfigconbuilder.build(); //Create the HttpGet request object HttpGet httpget = new HttpGet("/"); //Setting the config to the request httpget.setConfig(config); //Printing the status line HttpResponse response = httpclient.execute(targetHost, httpget); System.out.println(response.getStatusLine()); } }
Выход
При выполнении вышеупомянутая программа генерирует следующий вывод —
HTTP/1.1 200 OK
Apache HttpClient — Форма входа на основе
Используя библиотеку HttpClient, вы можете отправить запрос или войти в форму, передав параметры.
Следуйте инструкциям ниже, чтобы войти в форму.
Шаг 1 — Создайте объект HttpClient
Метод createDefault () класса HttpClients возвращает объект класса CloseableHttpClient , который является базовой реализацией интерфейса HttpClient. Используя этот метод, создайте объект HttpClient —
CloseableHttpClient httpClient = HttpClients.createDefault();
Шаг 2 — Создание объекта RequestBuilder
Класс RequestBuilder используется для построения запроса путем добавления к нему параметров. Если тип запроса — PUT или POST, он добавляет параметры в запрос как объект, закодированный в URL.
Создайте объект RequestBuilder (типа POST), используя метод post ().
//Building the post request object RequestBuilder reqbuilder = RequestBuilder.post();
Шаг 3 — Установите Uri и параметры для RequestBuilder.
Установите URI и параметры для объекта RequestBuilder, используя методы setUri () и addParameter () класса RequestBuilder.
//Set URI and parameters RequestBuilder reqbuilder = reqbuilder.setUri("http://httpbin.org/post"); reqbuilder = reqbuilder1.addParameter("Name", "username").addParameter("password", "password");
Шаг 4 — Создайте объект HttpUriRequest
После установки необходимых параметров создайте объект HttpUriRequest с помощью метода build () .
//Building the HttpUriRequest object HttpUriRequest httppost = reqbuilder2.build();
Шаг 5 — Выполнить запрос
Метод execute объекта CloseableHttpClient принимает объект HttpUriRequest (interface) (т.е. HttpGet, HttpPost, HttpPut, HttpHead и т. Д.) И возвращает объект ответа.
Выполните HttpUriRequest, созданный на предыдущих шагах, передав его методу execute () .
//Execute the request HttpResponse httpresponse = httpclient.execute(httppost);
пример
В следующем примере показано, как войти в форму, отправив учетные данные для входа. Здесь мы отправили два параметра — имя пользователя и пароль в форму и попытались напечатать сущность сообщения и статус запроса.
import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.methods.RequestBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import java.io.IOException; import java.net.URISyntaxException; public class FormLoginExample { public static void main(String args[]) throws Exception { //Creating CloseableHttpClient object CloseableHttpClient httpclient = HttpClients.createDefault(); //Creating the RequestBuilder object RequestBuilder reqbuilder = RequestBuilder.post(); //Setting URI and parameters RequestBuilder reqbuilder1 = reqbuilder.setUri("http://httpbin.org/post"); RequestBuilder reqbuilder2 = reqbuilder1.addParameter("Name", "username").addParameter("password", "password"); //Building the HttpUriRequest object HttpUriRequest httppost = reqbuilder2.build(); //Executing the request HttpResponse httpresponse = httpclient.execute(httppost); //Printing the status and the contents of the response System.out.println(EntityUtils.toString(httpresponse.getEntity())); System.out.println(httpresponse.getStatusLine()); } }
Выход
При выполнении вышеупомянутая программа генерирует следующий вывод —
{ "args": {}, "data": "", "files": {}, "form": { "Name": "username", "password": "password" }, "headers": { "Accept-Encoding": "gzip,deflate", "Connection": "close", "Content-Length": "31", "Content-Type": "application/x-www-form-urlencoded; charset = UTF-8", "Host": "httpbin.org", "User-Agent": "Apache-HttpClient/4.5.6 (Java/1.8.0_91)" }, "json": null, "origin": "117.216.245.180", "url": "http://httpbin.org/post" } HTTP/1.1 200 OK
Форма Войти с помощью файлов cookie
Если ваша форма хранит куки, вместо создания объекта CloseableHttpClient по умолчанию.
Создайте объект CookieStore, создав экземпляр класса BasicCookieStore.
//Creating a BasicCookieStore object BasicCookieStore cookieStore = new BasicCookieStore();
Создайте HttpClientBuilder, используя метод custom () класса HttpClients .
//Creating an HttpClientBuilder object HttpClientBuilder clientbuilder = HttpClients.custom();
Установите хранилище cookie для построителя клиента, используя метод setDefaultCookieStore ().
//Setting default cookie store to the client builder object Clientbuilder = clientbuilder.setDefaultCookieStore(cookieStore);
Создайте объект CloseableHttpClient, используя метод build () .
//Building the CloseableHttpClient object CloseableHttpClient httpclient = clientbuilder1.build();
Создайте объект HttpUriRequest, как указано выше, передавая запрос на выполнение.
Если на странице хранятся файлы cookie, переданные вами параметры будут добавлены в хранилище файлов cookie.
Вы можете распечатать содержимое объекта CookieStore, где вы можете увидеть ваши параметры (наряду с предыдущими страница, сохраненная в кейсе).
Чтобы распечатать файлы cookie, получите все файлы cookie из объекта CookieStore с помощью метода getCookies () . Этот метод возвращает объект List . Используя Iterator, распечатайте содержимое списка объектов, как показано ниже —
//Printing the cookies List list = cookieStore.getCookies(); System.out.println("list of cookies"); Iterator it = list.iterator(); if(it.hasNext()) { System.out.println(it.next()); }
Apache HttpClient — управление файлами cookie
Куки-файлы — это текстовые файлы, которые хранятся на клиентском компьютере и хранятся в целях отслеживания различной информации.
HttpClient обеспечивает поддержку файлов cookie, которые вы можете создавать и управлять файлами cookie.
Создание куки
Следуйте приведенным ниже инструкциям, чтобы создать файл cookie с помощью библиотеки HttpClient.
Шаг 1 — Создать объект Cookiestore
Интерфейс CookieStore представляет абстрактное хранилище для объектов Cookie. Вы можете создать хранилище cookie, создав экземпляр класса BasicCookieStore , который является реализацией этого интерфейса по умолчанию.
//Creating the CookieStore object CookieStore cookieStore = new BasicCookieStore();
Шаг 2 — Создание объекта ClientCookie
В дополнение к функциям файлов cookie, ClientCookie может получить оригинальные файлы cookie на сервере. Вы можете создать файл cookie клиента, создав экземпляр класса BasicClientCookie . В конструктор этого класса вам нужно передать пару ключ-значение, которую вы хотели сохранить в этом конкретном файле cookie.
//Creating client cookie BasicClientCookie clientCookie = new BasicClientCookie("name","Raju");
Шаг 3 — Установите значения для куки
Для файла cookie клиента вы можете установить / удалить путь, значение, версию, срок действия, домен, комментарий и атрибут, используя соответствующие методы.
Calendar myCal = new GregorianCalendar(2018, 9, 26); Date expiryDate = myCal.getTime(); clientcookie.setExpiryDate(expiryDate); clientcookie.setPath("/"); clientcookie.setSecure(true); clientcookie.setValue("25"); clientcookie.setVersion(5);
Шаг 4 — Добавить куки в магазин печенья
Вы можете добавить куки в хранилище куки, используя метод addCookie () класса BasicCookieStore .
Добавьте необходимые куки в Cookiestore .
//Adding the created cookies to cookie store cookiestore.addCookie(clientcookie);
пример
Следующий пример демонстрирует, как создавать куки и добавлять их в магазин куки. Здесь мы создали хранилище cookie, набор файлов cookie, задав значения домена и пути, и добавили их в хранилище cookie.
import org.apache.http.client.CookieStore; import org.apache.http.impl.client.BasicCookieStore; import org.apache.http.impl.cookie.BasicClientCookie; public class CookieHandlingExample { public static void main(String args[]) throws Exception{ //Creating the CookieStore object CookieStore cookiestore = new BasicCookieStore(); //Creating client cookies BasicClientCookie clientcookie1 = new BasicClientCookie("name","Raju"); BasicClientCookie clientcookie2 = new BasicClientCookie("age","28"); BasicClientCookie clientcookie3 = new BasicClientCookie("place","Hyderabad"); //Setting domains and paths to the created cookies clientcookie1.setDomain(".sample.com"); clientcookie2.setDomain(".sample.com"); clientcookie3.setDomain(".sample.com"); clientcookie1.setPath("/"); clientcookie2.setPath("/"); clientcookie3.setPath("/"); //Adding the created cookies to cookie store cookiestore.addCookie(clientcookie1); cookiestore.addCookie(clientcookie2); cookiestore.addCookie(clientcookie3); } }
Извлечение печенья
Вы можете добавить файлы cookie в хранилище файлов cookie с помощью метода getCookies () класса asicCookieStore . Этот метод возвращает список, в котором хранятся все файлы cookie в хранилище файлов cookie.
Вы можете распечатать содержимое хранилища cookie с помощью Итератора, как показано ниже —
//Retrieving the cookies List list = cookieStore.getCookies(); //Creating an iterator to the obtained list Iterator it = list.iterator(); while(it.hasNext()) { System.out.println(it.next()); }
пример
В следующем примере показано, как получить файлы cookie из магазина cookie. Здесь мы добавляем кучу файлов cookie в магазин и получаем их обратно.
import org.apache.http.client.CookieStore; import org.apache.http.impl.client.BasicCookieStore; import org.apache.http.impl.cookie.BasicClientCookie; public class CookieHandlingExample { public static void main(String args[]) throws Exception{ //Creating the CookieStore object CookieStore cookiestore = new BasicCookieStore(); //Creating client cookies BasicClientCookie clientcookie1 = new BasicClientCookie("name","Raju"); BasicClientCookie clientcookie2 = new BasicClientCookie("age","28"); BasicClientCookie clientcookie3 = new BasicClientCookie("place","Hyderabad"); //Setting domains and paths to the created cookies clientcookie1.setDomain(".sample.com"); clientcookie2.setDomain(".sample.com"); clientcookie3.setDomain(".sample.com"); clientcookie1.setPath("/"); clientcookie2.setPath("/"); clientcookie3.setPath("/"); //Adding the created cookies to cookie store cookiestore.addCookie(clientcookie1); cookiestore.addCookie(clientcookie2); cookiestore.addCookie(clientcookie3); } }
Выход
При выполнении эта программа генерирует следующий вывод —
[version: 0][name: age][value: 28][domain: .sample.com][path: /][expiry: null] [version: 0][name: name][value: Raju][domain: my.example.com][path: /][expiry: null] [version: 0][name: place][value: Hyderabad][domain: .sample.com][path: /][expiry: null]
Apache HttpClient — несколько потоков
Многопоточная программа содержит две или более частей, которые могут работать одновременно, и каждая часть может одновременно обрабатывать разные задачи, оптимально используя доступные ресурсы.
Вы можете выполнять запросы из нескольких потоков, написав многопоточную программу HttpClient.
Если вы хотите последовательно выполнить несколько клиентских запросов из потоков, вам необходимо создать ClientConnectionPoolManager . Он поддерживает пул HttpClientConnections и обслуживает несколько запросов от потоков.
Диспетчер соединений объединяет соединения в зависимости от маршрута. Если у менеджера есть соединения для определенного маршрута, он обслуживает новые запросы в этих маршрутах, арендуя существующее соединение из пула, вместо того, чтобы создавать новое.
Выполните шаги для выполнения запросов из нескольких потоков —
Шаг 1 — Создание диспетчера клиентских подключений
Создайте диспетчер пулов клиентских подключений, создав экземпляр класса PoolingHttpClientConnectionManager .
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager();
Шаг 2 — Установите максимальное количество соединений
Установите максимальное количество соединений в пуле, используя метод setMaxTotal () .
//Set the maximum number of connections in the pool connManager.setMaxTotal(100);
Шаг 3 — Создание объекта ClientBuilder
Создайте объект ClientBuilder , установив диспетчер соединений с помощью метода setConnectionManager (), как показано ниже:
HttpClientBuilder clientbuilder = HttpClients.custom().setConnectionManager(connManager);
Шаг 4 — Создание объектов запроса HttpGet
Создайте экземпляр класса HttpGet, передав нужный URI его конструктору в качестве параметра.
HttpGet httpget1 = new HttpGet("URI1"); HttpGet httpget2 = new HttpGet("URI2"); . . . . . . . . . . . .
Шаг 5 — Реализация метода запуска
Убедитесь, что вы создали класс, сделали его потоком (либо путем расширения класса потока, либо путем реализации интерфейса Runnable) и реализовали метод run.
public class ClientMultiThreaded extends Thread { public void run() { //Run method implementation . . . . . . . . . . } }
Шаг 6 — Создание объектов Thread
Создайте объекты потока, создав экземпляр класса Thread (ClientMultiThreaded), созданного выше.
Передайте объект HttpClient, соответствующий объект HttpGet и целое число, представляющее идентификатор для этих потоков.
ClientMultiThreaded thread1 = new ClientMultiThreaded(httpclient,httpget1, 1); ClientMultiThreaded thread2 = new ClientMultiThreaded(httpclient,httpget2, 2); . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Шаг 7 — Начните и присоединяйтесь к темам
Запустите все потоки, используя метод start (), и соедините их, используя метод join () .
thread1.start(); thread2.start(); . . . . . . . . thread1.join(); thread2.join(); . . . . . . . . . . . .
Шаг 8 — Выполнить реализацию метода
В методе run выполните запрос, получите ответ и распечатайте результаты.
пример
Следующий пример демонстрирует выполнение HTTP-запросов одновременно из нескольких потоков. В этом примере мы пытаемся выполнить различные запросы из разных потоков и пытаемся распечатать статус и количество байтов, прочитанных каждым клиентом.
import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.util.EntityUtils; public class ClientMultiThreaded extends Thread { CloseableHttpClient httpClient; HttpGet httpget; int id; public ClientMultiThreaded(CloseableHttpClient httpClient, HttpGet httpget, int id) { this.httpClient = httpClient; this.httpget = httpget; this.id = id; } @Override public void run() { try{ //Executing the request CloseableHttpResponse httpresponse = httpClient.execute(httpget); //Displaying the status of the request. System.out.println("status of thread "+id+":"+httpresponse.getStatusLine()); //Retrieving the HttpEntity and displaying the no.of bytes read HttpEntity entity = httpresponse.getEntity(); if (entity != null) { System.out.println("Bytes read by thread thread "+id+": "+EntityUtils.toByteArray(entity).length); } }catch(Exception e) { System.out.println(e.getMessage()); } } public static void main(String[] args) throws Exception { //Creating the Client Connection Pool Manager by instantiating the PoolingHttpClientConnectionManager class. PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(); //Set the maximum number of connections in the pool connManager.setMaxTotal(100); //Create a ClientBuilder Object by setting the connection manager HttpClientBuilder clientbuilder = HttpClients.custom().setConnectionManager(connManager); //Build the CloseableHttpClient object using the build() method. CloseableHttpClient httpclient = clientbuilder.build(); //Creating the HttpGet requests HttpGet httpget1 = new HttpGet("http://www.tutorialspoint.com/"); HttpGet httpget2 = new HttpGet("http://www.google.com/"); HttpGet httpget3 = new HttpGet("https://www.qries.com/"); HttpGet httpget4 = new HttpGet("https://in.yahoo.com/"); //Creating the Thread objects ClientMultiThreaded thread1 = new ClientMultiThreaded(httpclient,httpget1, 1); ClientMultiThreaded thread2 = new ClientMultiThreaded(httpclient,httpget2, 2); ClientMultiThreaded thread3 = new ClientMultiThreaded(httpclient,httpget3, 3); ClientMultiThreaded thread4 = new ClientMultiThreaded(httpclient,httpget4, 4); //Starting all the threads thread1.start(); thread2.start(); thread3.start(); thread4.start(); //Joining all the threads thread1.join(); thread2.join(); thread3.join(); thread4.join(); } }
Выход
При выполнении вышеупомянутая программа генерирует следующий вывод —
status of thread 1: HTTP/1.1 200 OK Bytes read by thread thread 1: 36907 status of thread 2: HTTP/1.1 200 OK Bytes read by thread thread 2: 13725 status of thread 3: HTTP/1.1 200 OK Bytes read by thread thread 3: 17319 status of thread 4: HTTP/1.1 200 OK Bytes read by thread thread 4: 127018
Apache HttpClient — пользовательский контекст SSL
Используя Secure Socket Layer, вы можете установить защищенное соединение между клиентом и сервером. Это помогает защитить конфиденциальную информацию, такую как номера кредитных карт, имена пользователей, пароли, булавки и т. Д.
Вы можете сделать соединения более безопасными, создав собственный контекст SSL с помощью библиотеки HttpClient .
Выполните шаги, указанные ниже, чтобы настроить SSLContext с помощью библиотеки HttpClient —
Шаг 1 — Создайте объект SSLContextBuilder
SSLContextBuilder является компоновщиком объектов SSLContext. Создайте его объект, используя метод custom () класса SSLContexts .
//Creating SSLContextBuilder object SSLContextBuilder SSLBuilder = SSLContexts.custom();
Шаг 2 — Загрузите хранилище ключей
В пути Java_home_directory / jre / lib / security / вы можете найти файл с именем cacerts. Сохраните его как файл хранилища ключей (с расширением .jks). Загрузите файл хранилища ключей и его пароль (который по умолчанию изменен ) с помощью метода loadTrustMaterial () класса SSLContextBuilder .
//Loading the Keystore file File file = new File("mykeystore.jks"); SSLBuilder = SSLBuilder.loadTrustMaterial(file, "changeit".toCharArray());
Шаг 3 — построить объект SSLContext
Объект SSLContext представляет реализацию протокола защищенного сокета. Создайте SSLContext, используя метод build () .
//Building the SSLContext SSLContext sslContext = SSLBuilder.build();
Шаг 4 — Создание объекта SSLConnectionSocketFactory
SSLConnectionSocketFactory — это многоуровневая фабрика сокетов для соединений TSL и SSL. Используя это, вы можете проверить сервер Https, используя список доверенных сертификатов, и аутентифицировать данный сервер Https.
Вы можете создать это разными способами. В зависимости от способа создания объекта SSLConnectionSocketFactory вы можете разрешить все узлы, разрешить только самозаверяющие сертификаты, разрешить только определенные протоколы и т. Д.
Чтобы разрешить только определенные протоколы , создайте объект SSLConnectionSocketFactory , передав объект SSLContext, строковый массив, представляющий протоколы, должны поддерживаться, строковый массив, представляющий костюмы шифров, должен поддерживаться, и объект HostnameVerifier его конструктору.
new SSLConnectionSocketFactory(sslcontext, new String[]{"TLSv1"}, null, SSLConnectionSocketFactory.getDefaultHostnameVerifier());
Чтобы разрешить все хосты, создайте объект SSLConnectionSocketFactory , передав объект SSLContext и объект NoopHostnameVerifier .
//Creating SSLConnectionSocketFactory SSLConnectionSocketFactory object SSLConnectionSocketFactory sslConSocFactory = new SSLConnectionSocketFactory(sslcontext, new NoopHostnameVerifier());
Шаг 5 — Создайте объект HttpClientBuilder
Создайте объект HttpClientBuilder с помощью метода custom () класса HttpClients .
//Creating HttpClientBuilder HttpClientBuilder clientbuilder = HttpClients.custom();
Шаг 6 — Установите объект SSLConnectionSocketFactory
Установите для объекта SSLConnectionSocketFactory значение HttpClientBuilder, используя метод setSSLSocketFactory () .
//Setting the SSLConnectionSocketFactory clientbuilder = clientbuilder.setSSLSocketFactory(sslConSocFactory);
Шаг 7 — Постройте объект CloseableHttpClient
Создайте объект CloseableHttpClient , вызвав метод build () .
//Building the CloseableHttpClient CloseableHttpClient httpclient = clientbuilder.build();
Шаг 8 — Создайте объект HttpGet
Класс HttpGet представляет HTTP-запрос GET, который извлекает информацию о данном сервере с использованием URI.
Создайте HTTP-запрос GET, создав экземпляр класса HttpGet, передав строку, представляющую URI.
//Creating the HttpGet request HttpGet httpget = new HttpGet("https://example.com/");
Шаг 9 — Выполнить запрос
Выполните запрос, используя метод execute () .
//Executing the request HttpResponse httpresponse = httpclient.execute(httpget);
пример
Следующий пример демонстрирует настройку SSLContrext —
import java.io.File; import javax.net.ssl.SSLContext; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClients; import org.apache.http.ssl.SSLContextBuilder; import org.apache.http.ssl.SSLContexts; import org.apache.http.util.EntityUtils; public class ClientCustomSSL { public final static void main(String[] args) throws Exception { //Creating SSLContextBuilder object SSLContextBuilder SSLBuilder = SSLContexts.custom(); //Loading the Keystore file File file = new File("mykeystore.jks"); SSLBuilder = SSLBuilder.loadTrustMaterial(file, "changeit".toCharArray()); //Building the SSLContext usiong the build() method SSLContext sslcontext = SSLBuilder.build(); //Creating SSLConnectionSocketFactory object SSLConnectionSocketFactory sslConSocFactory = new SSLConnectionSocketFactory(sslcontext, new NoopHostnameVerifier()); //Creating HttpClientBuilder HttpClientBuilder clientbuilder = HttpClients.custom(); //Setting the SSLConnectionSocketFactory clientbuilder = clientbuilder.setSSLSocketFactory(sslConSocFactory); //Building the CloseableHttpClient CloseableHttpClient httpclient = clientbuilder.build(); //Creating the HttpGet request HttpGet httpget = new HttpGet("https://example.com/"); //Executing the request HttpResponse httpresponse = httpclient.execute(httpget); //printing the status line System.out.println(httpresponse.getStatusLine()); //Retrieving the HttpEntity and displaying the no.of bytes read HttpEntity entity = httpresponse.getEntity(); if (entity != null) { System.out.println(EntityUtils.toByteArray(entity).length); } } }
Выход
При выполнении вышеупомянутая программа генерирует следующий вывод.
HTTP/1.1 200 OK 1270
Apache HttpClient — Multipart Upload
Используя HttpClient, мы можем выполнять многокомпонентную загрузку, то есть мы можем загружать большие объекты небольшими частями. В этой главе мы продемонстрируем многоэтапную загрузку в HTTP-клиенте, загрузив простой текстовый файл.
В общем, любая многочастная загрузка состоит из трех частей.
-
Начало загрузки
-
Загрузка частей объекта
-
Завершение многочастной загрузки
Начало загрузки
Загрузка частей объекта
Завершение многочастной загрузки
Для многоэтапной загрузки с использованием HttpClient нам необходимо выполнить следующие шаги:
-
Создать многокомпонентный конструктор.
-
Добавьте нужные части к нему.
-
Завершите сборку и получите составную часть HttpEntity.
-
Создайте запрос, установив вышеуказанный объект muti-part.
-
Выполнить запрос.
Создать многокомпонентный конструктор.
Добавьте нужные части к нему.
Завершите сборку и получите составную часть HttpEntity.
Создайте запрос, установив вышеуказанный объект muti-part.
Выполнить запрос.
Ниже приведены шаги для загрузки составного объекта с использованием библиотеки HttpClient.
Шаг 1 — Создайте объект HttpClient
Метод createDefault () класса HttpClients возвращает объект класса CloseableHttpClient , который является базовой реализацией интерфейса HttpClient. Используя этот метод, создайте объект HttpClient —
//Creating CloseableHttpClient object CloseableHttpClient httpclient = HttpClients.createDefault();
Шаг 2 — Создать объект FileBody
Класс FileBody представляет двоичную часть тела, поддерживаемую файлом. Создайте экземпляр этого класса, передав объект File и объект ContentType, представляющий тип содержимого.
//Creating a File object File file = new File("sample.txt"); //Creating the FileBody object FileBody filebody = new FileBody(file, ContentType.DEFAULT_BINARY);
Шаг 3 — Создайте MultipartEntityBuilder
Класс MultipartEntityBuilder используется для создания объекта HttpEntity, состоящего из нескольких частей . Создайте его объект, используя метод create () (того же класса).
//Creating the MultipartEntityBuilder MultipartEntityBuilder entitybuilder = MultipartEntityBuilder.create();
Шаг 4 — Установите режим
MultipartEntityBuilder имеет три режима: STRICT, RFC6532 и BROWSER_COMPATIBLE. Установите желаемый режим, используя метод setMode () .
//Setting the mode entitybuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
Шаг 5 — Добавьте различные нужные части
Используя методы addTextBody () , addPart () и addBinaryBody () , вы можете добавить простой текст, файлы, потоки и другие объекты в MultipartBuilder . Добавьте желаемое содержимое с помощью этих методов.
//Adding text entitybuilder.addTextBody("sample_text", "This is the text part of our file"); //Adding a file entitybuilder.addBinaryBody("image", new File("logo.png"));
Шаг 6 — Создание единого объекта
Вы можете собрать все эти части в одну сущность, используя метод build () класса MultipartEntityBuilder . Используя этот метод, соберите все части в один HttpEntity .
//Building a single entity using the parts HttpEntity mutiPartHttpEntity = entityBuilder.build();
Шаг 7 — Создание объекта RequestBuilder
Класс RequestBuilder используется для построения запроса путем добавления к нему параметров. Если запрос имеет тип PUT или POST, он добавляет параметры в запрос как объект в кодировке URL.
Создайте объект RequestBuilder (типа POST), используя метод post () . И передайте Uri, которому вы хотите отправить запрос, в качестве параметра.
//Building the post request object RequestBuilder reqbuilder = RequestBuilder.post("http://httpbin.org/post");
Шаг 8 — Установите объект объекта в RequestBuilder
Установите созданный выше составной объект в RequestBuilder, используя метод setEntity () класса RequestBuilder .
//Setting the entity object to the RequestBuilder reqbuilder.setEntity(mutiPartHttpEntity);
Шаг 9 — Создайте запрос HttpUriRequest
Создайте объект запроса HttpUriRequest, используя метод build () класса RequestBuilder .
//Building the request HttpUriRequest multipartRequest = reqbuilder.build();
Шаг 10 — Выполнить запрос
Используя метод execute () , выполните запрос, созданный на предыдущем шаге (обойдя запрос в качестве параметра для этого метода).
//Executing the request HttpResponse httpresponse = httpclient.execute(multipartRequest);
пример
В следующем примере показано, как отправить многокомпонентный запрос с использованием библиотеки HttpClient. В этом примере мы пытаемся отправить многокомпонентный запрос, подкрепленный файлом.
import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.methods.RequestBuilder; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; public class MultipartUploadExample { public static void main(String args[]) throws Exception{ //Creating CloseableHttpClient object CloseableHttpClient httpclient = HttpClients.createDefault(); //Creating a file object File file = new File("sample.txt"); //Creating the FileBody object FileBody filebody = new FileBody(file, ContentType.DEFAULT_BINARY); //Creating the MultipartEntityBuilder MultipartEntityBuilder entitybuilder = MultipartEntityBuilder.create(); //Setting the mode entitybuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); //Adding text entitybuilder.addTextBody("sample_text", "This is the text part of our file"); //Adding a file entitybuilder.addBinaryBody("image", new File("logo.png")); //Building a single entity using the parts HttpEntity mutiPartHttpEntity = entitybuilder.build(); //Building the RequestBuilder request object RequestBuilder reqbuilder = RequestBuilder.post("http://httpbin.org/post"); //Set the entity object to the RequestBuilder reqbuilder.setEntity(mutiPartHttpEntity); //Building the request HttpUriRequest multipartRequest = reqbuilder.build(); //Executing the request HttpResponse httpresponse = httpclient.execute(multipartRequest); //Printing the status and the contents of the response System.out.println(EntityUtils.toString(httpresponse.getEntity())); System.out.println(httpresponse.getStatusLine()); } }
Выход
При выполнении вышеупомянутая программа генерирует следующий вывод —