Как отправить http запрос java

Отправка GET запросов в Java

Как отправить http запрос java

Сегодня мы рассмотрим, как отправлять GET запросы в Java. Для отправки http запросов мы будем использовать библиотеку Apache HttpClient.

import org.apache.http.HttpEntity;
import org.apache.http.HttpHeaders;
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;
import org.apache.http.util.EntityUtils;

public class HttpClientGetRequest <

public static void main(String[] args) throws IOException <

CloseableHttpClient httpClient = HttpClients.createDefault();

// создаем объект клиента
HttpGet request = new HttpGet(«https://myrusakov.ru»);

// добавляем заголовки запроса
request.addHeader(«Author», «MyRusakov.Ru»);
request.addHeader(HttpHeaders.USER_AGENT, «MyRusakov.HttpClient»);

CloseableHttpResponse response = httpClient.execute(request);

// получаем статус ответа
System.out.println(response.getProtocolVersion()); // HTTP/1.1
System.out.println(response.getStatusLine().getStatusCode()); // 200
System.out.println(response.getStatusLine().getReasonPhrase()); // OK
System.out.println(response.getStatusLine().toString()); // HTTP/1.1 200 OK

> finally <
// закрываем соединения
response.close();
>
> finally <
httpClient.close();
>

Как отправить http запрос java

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Комментарии ( 0 ):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.

Источник

Заметки программистера

Страницы

В предыдущей статье, был поверхностно рассмотрен стек TCP/IP и способы его использования в java. Это очень важный фундамент, который позволит перейти к изучению непосредственно http.

Http заголовок запроса

В этом сообщении указана команда (get) и версия протокола (1.1), которую поддерживает клиент. Веб-сервер, исходя из этой информации, формирует ответное сообщение и отправляет его клиенту.

И так, у нас есть текстовое сообщение, которое необходимо передать программе, возможно запущенной на совершенно иной, удаленной машине. Благодаря протоколу TCP/IP эта задача кажется элементарной, для ее реализации осталось лишь узнать адрес целевого сервера. Для этого в протоколе http существует специальное поле: Host

В нем указывается адрес запрашиваемого сервера и, при необходимости, через двоеточие порт. Чаще всего порт опускается, так как распространенная практика заключается в использовании порта 80. В приведенном ранее простейшем случае подразумевается локальная машина и порт 80.

На самом деле, спецификация http предусматривает достаточно много полей заголовка сообщения отправляемого клиентом (чаще всего браузером). Заголовок редко ограничивается парой строк и чаще выглядит примерно так:

Обратите внимание, что символом конца заголовка являются два, идущих подряд, символа конца строки: «\n\n» (так же допускается «\n\r\n\r»).

Кратко рассмотрим самые популярные поля заголовка.

Строка запроса (Request-Line)

Адрес сервера (Host)

Поддерживаемые типы файлов (Accept)

Адрес перехода(Referer)

Поддерживаемый язык (Accept-Language)

Пользовательский клиент (User-Agent)

«Печеньки» (Cookie)

Диапазон(Range)

Эта статья не претендует на исчерпывающее изложение деталей http протокола. Наиболее подробную информацию о нем вы можете найти по адресу: RFC 2616.

Простейший Http клиент на Java

Пришло время все «потрогать собственными руками». Для этого я предлагаю простейшую реализацию http клиента, который, следуя unix-way (о нем в ближайшей статье), будет получать на вход содержимое заголовка сообщения и отправлять его на сервер.

Http заголовок ответа

Список полей заголовка ответного сообщения велик и целиком его можно по прежнему увидеть здесь. Но для общего развития разберем пару параметров, что встретились в нашем примере.

И снова обязательной является только первая строка (строка состояния). В ней указывается версия протокола, трехзначный код ответа и его расшифровка:

Это либо текущая дата (если документ динамический), либо дата создания отправляемого файла. Дата представлена в формате GMT.

Затем указывается сервер

Указывает клиенту, какая часть документа ему пересылается. Может содержать значение «bytes», означающее, что пересылается файл целиком. Так же «none» (или этот параметр может быть просто опущен), означающее, что докачка не используется или не поддерживается, а строка «Accept-Ranges: 1:637» будет означать, что пересылается кусок документа с байта под номером 1 и длиной в 637 байт.

Следующий параметр указывает длину отправленного сервером документа

Подытожим

Эта статья не раскрыла новых тонкостей Java API для работы с http, но должна была привнести ясность в понимание того, чем же на самом деле является http: это не более чем договоренность о формате сообщений пересылаемых между сервером и клиентом. Способ их доставки играет отнюдь не ключевую роль. Вместо TCP/IP с задачей реализации http может справиться и Почта России, и почтовые голуби. Было бы желание! =)

Источник

How to send HTTP request in java? [duplicate]

In Java, How to compose a HTTP request message and send it to a HTTP WebServer?

9 Answers 9

Example (from here), with improvements. Included in case of link rot:

Как отправить http запрос java

I know others will recommend Apache’s http-client, but it adds complexity (i.e., more things that can go wrong) that is rarely warranted. For a simple task, java.net.URL will do.

Not that HttpUrlConnection is a bad choice, HttpComponents will abstract a lot of the tedious coding away. I would recommend this, if you really want to support a lot of HTTP servers/clients with minimum code. By the way, HttpCore could be used for applications (clients or servers) with minimum functionality, whereas HttpClient is to be used for clients that require support for multiple authentication schemes, cookie support etc.

Как отправить http запрос java

Here’s a complete Java 7 program:

The new try-with-resources will auto-close the Scanner, which will auto-close the InputStream.

This will help you. Don’t forget to add the JAR HttpClient.jar to the classpath.

Как отправить http запрос java

You may use Socket for this like

Как отправить http запрос java

Google java http client has nice API for http requests. You can easily add JSON support etc. Although for simple request it might be overkill.

There’s a great link about sending a POST request here by Example Depot::

If you want to send a GET request you can modify the code slightly to suit your needs. Specifically you have to add the parameters inside the constructor of the URL. Then, also comment out this wr.write(data);

One thing that’s not written and you should beware of, is the timeouts. Especially if you want to use it in WebServices you have to set timeouts, otherwise the above code will wait indefinitely or for a very long time at least and it’s something presumably you don’t want.

Timeouts are set like this conn.setReadTimeout(2000); the input parameter is in milliseconds

Not the answer you’re looking for? Browse other questions tagged java html http httpwebrequest or ask your own question.

Linked

Related

Hot Network Questions

site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.12.22.41046

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

Источник

Изучение нового HTTP-клиента на Java

Изучите новый API Java HttpClient, который обеспечивает большую гибкость и мощные функции.

1. введение

В этом уроке мы рассмотрим новую инкубацию Java 9 HttpClient .

До недавнего времени Java предоставляла только HttpURLConnection API, который является низкоуровневым и не известен как многофункциональный | и | удобный для пользователя.

2. Начальная настройка

Модуль HttpClient поставляется в комплекте с модулем инкубатора в JDK 9 и поддерживает HTTP/2 с обратной совместимостью, по-прежнему облегчающей HTTP/1.1.

Чтобы использовать его, нам нужно определить наш модуль с помощью module-info.java файл, который также указывает необходимый модуль для запуска нашего приложения:

3. Обзор API HTTP-клиента

В отличие от HttpURLConnection, HttpClient обеспечивает синхронные и асинхронные механизмы запросов.

API состоит из 3 основных классов:

Мы рассмотрим каждый из них более подробно в следующих разделах. Во – первых, давайте сосредоточимся на запросе.

4. HttpRequest

Http-запрос, как следует из названия , – это объект, представляющий запрос, который мы хотим отправить. Новые экземпляры могут быть созданы с помощью HttpRequest.Строитель.

Мы рассмотрим самые важные из них.

4.1. Настройка URI

Первое, что мы должны сделать при создании запроса, – это указать URL-адрес.

Мы можем сделать это двумя способами – используя конструктор для Builder с параметром URI или вызвав метод uri(URI) на экземпляре Builder :

Последнее, что нам нужно настроить для создания базового запроса, – это метод HTTP.

4.2. Указание метода HTTP

Мы можем определить метод HTTP, который будет использоваться вашим запросом, вызвав один из методов из Builder :

Мы подробно рассмотрим Процессор тела позже. Теперь давайте просто создадим очень простой пример запроса GET :

4.3. Настройка версии протокола HTTP

API полностью использует протокол HTTP/2 и использует его по умолчанию, но мы можем определить, какую версию протокола мы хотим использовать.

Здесь важно отметить, что клиент вернется, например, к HTTP/1.1, если HTTP/2 не поддерживается.

4.4. Настройка заголовков

В случае, если мы хотим добавить дополнительные заголовки к вашему запросу, мы можем использовать предоставленные методы построения.

Мы можем сделать это одним из двух способов:

4.5. Установка тайм-аута

Теперь давайте определим, сколько времени мы хотим ждать ответа.

Если установленное время истекает, a Http TimeoutException будет выдано; тайм-аут по умолчанию установлен на бесконечность.

Тайм – аут может быть установлен с помощью Duration object-путем вызова метода timeout() на экземпляре builder:

5. Настройка тела запроса

В случае, если нам не нужно тело, мы можем просто передать запрос Http.noBody() :

5.1. Процессор StringBody

Настройка тела запроса с помощью любой реализации Body Processor очень проста и интуитивно понятна.

Как мы уже упоминали, этот объект может быть создан с помощью заводского метода из String() ; он принимает в качестве аргумента только объект String и создает из него тело:

5.2. Процессор InputStreamBody

Однако это также довольно просто:

5.3. Процессор байтовых массивов

Мы также можем использовать Процессор массива байтов и передать массив байтов в качестве параметра:

5.4. Файловый процессор

Для работы с файлом мы можем использовать предоставленный Файловый процессор ; его фабричный метод принимает путь к файлу в качестве параметра и создает тело из содержимого:

Мы рассмотрели, как создавать Http-запрос и как задать в нем дополнительные параметры.

6. HttpClient

Он предоставляет множество полезных и самоописывающих методов, которые мы можем использовать для обработки нашего запроса/ответа.

Давайте рассмотрим некоторые из них здесь.

6.1. Настройка прокси-сервера

Мы можем определить прокси-сервер для подключения. Просто вызовите метод proxy() на экземпляре Builder :

В нашем примере мы использовали системный прокси-сервер по умолчанию.

6.2. Настройка политики перенаправления

Иногда страница, к которой мы хотим получить доступ, перемещается по другому адресу.

В этом случае мы получим код состояния HTTP 3xx, обычно с информацией о новом URI. HttpClient может автоматически перенаправить запрос на новый URI, если мы установим соответствующую политику перенаправления.

Мы можем сделать это с помощью метода followRedirects() на Builder :

6.3. Настройка аутентификатора для подключения

Аутентификатор – это объект, который согласовывает учетные данные (HTTP-аутентификация) для подключения.

Он предоставляет различные схемы аутентификации (например, базовую или дайджест-аутентификацию). В большинстве случаев для аутентификации требуется имя пользователя и пароль для подключения к серверу.

Мы можем использовать Аутентификацию по паролю класс, который является просто держателем этих значений:

В приведенном выше примере мы передали значения имени пользователя и пароля в виде открытого текста; конечно, в производственном сценарии это должно быть по-другому.

Обратите внимание, что не каждый запрос должен использовать одно и то же имя пользователя и пароль. Класс Authenticator предоставляет ряд методов getXXX (например, getRequestingSite () ), которые можно использовать для определения того, какие значения должны быть предоставлены.

Теперь мы рассмотрим одну из самых полезных функций new HttpClient – асинхронные вызовы на сервер.

6.4. Отправка запросов – Синхронизация против Асинхронность

Новый HttpClient предоставляет две возможности для отправки запроса на сервер:

Однако у него есть много недостатков, особенно когда мы обрабатываем большие объемы данных.

Новый API также может обрабатывать несколько ответов и передавать тела запросов и ответов в потоковом режиме:

6.5. Настройка Исполнителя для асинхронных вызовов

Таким образом, мы можем, например, ограничить количество потоков, используемых для обработки запросов:

6.6. Определение менеджера файлов cookie

В случае, если ваш Менеджер файлов cookie разрешает хранение файлов cookie, мы можем получить к ним доступ, проверив Менеджер файлов cookie с нашего HttpClient :

7. Объект HttpResponse

Класс HttpResponse представляет ответ от сервера. Он предоставляет ряд полезных методов, но наиболее важными являются два:

7.1. URI объекта ответа

Иногда он может отличаться от URI в объекте запроса, поскольку может произойти перенаправление:

7.2. Заголовки из ответа

Мы можем получить заголовки из ответа, вызвав метод headers() на объекте ответа:

В нем есть несколько полезных методов, которые упрощают поиск значения заголовков.

7.3. Получить трейлеры из ответа

Ответ HTTP может содержать дополнительные заголовки, которые включаются после содержимого ответа. Эти заголовки называются заголовками трейлеров.

Мы можем получить их, вызвав метод trailers() on Http-Ответ:

Обратите внимание, что trailers() метод возвращает CompletableFuture объект.

7.4. Версия ответа

Метод version() определяет, какая версия протокола HTTP использовалась для взаимодействия с сервером.

Помните, что даже если мы определим, что хотим использовать HTTP/2, сервер может ответить через HTTP/1.1.

Версия, в которой сервер ответил, указана в ответе:

8. Http-клиент Java 11

Это изменение было реализовано в рамках JEP 321.

8.1. Основные изменения в рамках JEP 321

8.2. Проблемы С HTTP-Клиентом Pre Java 11

Существующее HttpURLConnection API и его реализация имели множество проблем:

9. Изменения в Http-клиенте с Java 11

9.1. Введение статических заводских классов

Они используются для выполнения полезных общих задач, таких как обработка тела ответа в виде строки или потоковая передача тела в файл.

Например, в Pre Java 11 мы должны были сделать что-то вроде этого:

Который мы теперь можем упростить как:

Кроме того, название статических методов было стандартизировано для большей ясности.

9.2. Беглые методы для общих типов телосложения

Были введены удобные заводские методы для создания издателей и обработчиков для обработки общих типов тел.

Например, у нас есть следующие методы fluent для создания издателей из байтов, файлов и строк:

Аналогично, для создания обработчиков из этих общих типов тел мы можем использовать:

9.3. Другие Изменения API

1. С помощью этого нового API мы будем использовать BodyHandlers.discarding() и BodyHandlers.replacing(значение) вместо discard(замена объекта) :

2. Новый метод of Lines() в Обработчиках тела добавляется в обработку потоковой передачи тела ответа в виде потока строк.

4. Добавлен новый BodySubscriber.mapping в BodySubscribers класс, который можно использовать для сопоставления одного типа тела ответа с другим, применив данную функцию к объекту тела.

10. Обработка Push-обещаний в HTTP/2

Новый Http-клиент поддерживает push-обещания через Обработчик Push-обещаний интерфейс .

Это позволяет серверу “подталкивать” контент к дополнительным ресурсам клиента при запросе основного ресурса, экономя больше времени и, как следствие, повышая производительность при рендеринге страниц.

Это действительно функция мультиплексирования HTTP/2, которая позволяет нам забыть о связывании ресурсов. Для каждого ресурса сервер отправляет клиенту специальный запрос, известный как push-обещание.

Давайте сначала создадим обработчик Push Promise/|:

Далее, давайте использовать метод SendAsync для обработки этого push-обещания:

11. Заключение

Источник

Как отправлять HTTP-запросы на Java

Вступление

Протокол передачи гипертекста (HTTP)-это протокол прикладного уровня, который, без преувеличения, в значительной степени является основой просмотра Интернета в том виде, в каком мы его знаем.

Он используется для передачи документов гипермедиа между клиентом и сервером и является неотъемлемой частью каждого отдельного веб-приложения, включая любые API, использующие архитектуру REST.

Это позволяет браузеру взаимодействовать с сервером, отправляя запросы на определенные документы, будь то HTML-документы (возвращаемые в виде страниц, которые мы видим) или гипермедиа (изображения, видео и т.д.), Которые отображаются на страницах.

Как Работает HTTP?

Когда мы решаем посетить веб-сайт, за кулисами происходит то, что наш компьютер генерирует и отправляет запрос на сервер, на котором размещен веб-сайт.

HTTP-запрос может выглядеть примерно так:

Сервер должен ответить примерно так:

За этим следует ответный орган :

Затем тело ответа будет отображено в нашем браузере, и нас встретит страница!

полный список кодов состояния HTTP довольно длинный, хотя неплохо бы его просмотреть.

Отправка запросов с помощью HttpURLConnection

HttpURLConnection – это базовый класс Java для обработки HTTP-запросов и ответов.

Использование HttpURLConnection идеально подходит для простых HTTP-запросов, хотя, если вы хотите проще добавлять такие вещи, как заголовки или аутентификацию, вам будет проще полагаться на другие библиотеки, такие как Apache Commons. ССЫЛКА НА СТАТЬЮ APACHE ЗДЕСЬ

Самый простой способ создать экземпляр объекта HttpURLConnection – это использовать объект URL :

Типы запросов

Теперь, когда наш Экземпляр HttpURLConnection существует, мы можем определить для него тип HTTP-запроса:

Параметры запроса

Чтобы достичь этого, мы обычно придумываем способ сопоставить эти значения. Иногда люди определяют свои собственные классы для хранения этих значений с помощью простого Хэш-карты все будет в порядке:

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

Теперь, когда мы сопоставили наши параметры, нам нужно сделать пару вещей, чтобы подготовить их к нашему запросу:

Давайте реализуем пункты из списка:

И, таким образом, наш параметр готов к использованию в запросе.

Заголовки запросов

Если вы хотите добавить заголовок к запросу, это так же просто, как:

И если вы хотите прочитать заголовок запроса:

Тайм-ауты

Интервалы, как обычно, определяются в миллисекундах.

Так, например, время ожидания соединения истекает, если оно не может быть установлено в течение 10 секунд. Аналогично, это также приведет к тайм-ауту, если данные не могут быть считаны из соединения в течение 10 секунд.

ОТПРАВИТЬ запрос

С вашим запросом все готово, мы можем продолжить и отправить СООБЩЕНИЕ запрос:

Здесь мы отправляем postDataBytes в наш POST запрос, который представляет собой массив байтов. Ознакомьтесь с демонстрацией ниже для получения более подробной информации о том, как это создать.

ПОЛУЧИТЬ запрос

Запросы GET предназначены только для извлечения данных, поэтому давайте продолжим и получим ответ:

На этом этапе мы можем извлечь множество различных видов информации из соединения :

Демонстрация

Запуск этого фрагмента кода, безусловно, достаточно, чтобы получить исходный код страницы, которую мы указали для получения:

Вывод

Протокол передачи гипертекста (HTTP)-это протокол прикладного уровня, который, без преувеличения, является очень большим и важным компонентом для интернет-приложений.

HttpURLConnection – это базовый класс Java для обработки HTTP-запросов и ответов.

Использование HttpURLConnection идеально подходит для простых HTTP-запросов, хотя, если вы хотите создавать более сложные HTTP-запросы с заголовками или аутентификацией, у вас будет гораздо более простой опыт работы с такими библиотеками, как Apache Commons. ССЫЛКА НА СТАТЬЮ APACHE ЗДЕСЬ

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *