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 ти можеш знайти за цим посиланням, в офіційній документації.
А далі ми розберемо найпопулярніші з них.
2. Метод 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();
3. Метод 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();
Дуже просто, чи не так? :)
4. Метод 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 секунд. Набагато корисніше одразу отримати виняток і правильно на нього зреагувати.
5. Метод 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();
Все елементарне – просто.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ