Методы 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();
Все элементарное просто.
задаваниязадать сразу много заголовков." 😊