JavaRush /Курсы /JSP & Servlets /Создание запроса с помощью HttpRequest

Создание запроса с помощью HttpRequest

JSP & Servlets
10 уровень , 1 лекция
Открыта

Методы newBuilder(), build()

Класс HttpRequеst используется для описания http-request, что легко понять из его названия. Этот объект сам по себе ничего не делает, он только содержит разнообразную информацию по поводу http-запроса. Поэтому, как ты уже, наверное, догадываешься, для его создания тоже используется шаблон Builder.


HttpRequest request = HttpRequest.newBuilder() .method1() .method2() .methodN() .build(); 

Где между вызовами методов newBuilder() и build() нужно вызвать все методы для конструирования объекта HttpRequest.

Пример простейшего запроса выглядит так:


HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create(“http://javarush.com”))
    .build();
HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());

Все методы класса HttpRequest ты можешь найти по ссылке в официальной документации.

А дальше мы разберем самые популярные из них.

Метод uri()

С помощью метода uri() можно задать URI (или URL), к которому будет отправлен http-запрос. Пример:


HttpRequest request = HttpRequest.newBuilder()
    .uri( URI.create(“http://javarush.com”) )
    .build();

Кстати, можно записать этот код еще немного короче, передав URI прямо в метод newBuilder():


HttpRequest request = HttpRequest.newBuilder( URI.create(“http://javarush.com”) ).build();  

Важно! URI можно создать двумя способами:

  • new URI(String)
  • URI.create(String)

Второй способ предпочтительнее. Первый способ, к сожалению, не очень хорош, потому-то конструктор URI объявлен так public URI(String str) throws URISyntaxException, а URISyntaxException — это checked-исключение.

Методы GET(), POST(), PUT(), DELETE()

Задать http-метод запроса можно с помощью методов:

  • GET()
  • POST()
  • PUT()
  • DELETE()

Вот как будет выглядеть простой GET-запрос:


HttpRequest request = HttpRequest.newBuilder()
  .uri(new URI("https://javarush.com"))
  .GET()
  .build();

Метод version()

Также можно задать версию HTTP-протокола. Их всего 2 варианта:

  • HttpClient.Version.HTTP_1_1
  • HttpClient.Version.HTTP_2

Допустим, ты хочешь создать запрос по протоколу HTTP/2, тогда тебе нужно будет написать:


HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://javarush.com"))
   .version( HttpClient.Version.HTTP_2 )
   .GET()
   .build();

Очень просто, не правда ли? :)

Метод timeout()

Также можно задать время выполнения запроса. Если оно пройдет, а запрос так и не будет выполнен, то выкинется исключение HttpTimeoutException.

Само время задается с помощью объекта Duration из Java DateTime API. Пример:


HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://javarush.com"))
   .timeout( Duration.of(5, SECONDS) )
   .GET()
   .build();

Наличие этого метода показывает, что классы HttpClient и HttpRequest могут решать самые разнообразные задачи. Представь, что ты выполняешь запрос, а что-то случилось с сетью и он продлился 30 секунд. Куда полезнее сразу получить исключение и правильно на него среагировать.

Метод header()

Также к любому запросу можно добавить сколько угодно заголовков. И сделать это так же просто, как и все остальное. Для этого есть специальный метод — header(). Пример:


HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://javarush.com"))
   .header("name1", "value1")
   .header("name2", "value2")
   .GET()
   .build();

Есть еще один альтернативный способ задать сразу много заголовков. Может пригодиться, если, ты, допустим, преобразовал список заголовков в массив:


HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://javarush.com"))
   .headers("name1", "value1", "name2", "value2")
   .GET()
   .build();

Все элементарное просто.

Комментарии (7)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Олег Уровень 106 Expert
4 сентября 2024
Без задач в одно ухо влетит - из другого вылетит :с
Павел Уровень 111 Expert
28 января 2024
"Важно! URI можно создать двумя способами: - new URI(String) - URI.create(String) Второй способ предпочтительнее. Первый способ, к сожалению, не очень хорош, потому-то конструктор URI объявлен так public URI(String str) throws URISyntaxException, а URISyntaxException — это checked-исключение". - и тут же во всех примерах продолжаем использовать первый способ
sectumsempra Уровень 1
27 июля 2024
)
4 мая 2025
(
Anonymous #3293031 Уровень 1
12 апреля 2023
а как убрать User-Agent ?
Саша И. Уровень 101 Expert
5 декабря 2022
"Есть еще один альтернативный способ задавания задать сразу много заголовков." 😊
13 июня 2024
Пофиг, все поняли смысл слов