metody newBuilder(), build()
Klasa HttpRequest jest używana do opisania żądania http, które łatwo rozpoznać po nazwie. Ten obiekt sam w sobie nic nie robi, po prostu zawiera różne informacje o żądaniu http. W związku z tym, jak już zapewne się domyślasz, szablon Builder służy również do jego tworzenia.
HttpRequest request = HttpRequest.newBuilder()
.method1()
.method2()
.methodN()
.build();
Gdzie między wywołaniami metod newBuilder() i build() musisz wywołać wszystkie metody, aby skonstruować obiektHttpRequest.
Przykład prostego żądania wygląda następująco:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(“http://codegym.cc”))
.build();
HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
Wszystkie metody klasy HttpRequest można znaleźć pod linkiem w oficjalnej dokumentacji .
A potem przeanalizujemy najpopularniejsze z nich.
metoda uri().
Za pomocą metody uri() możesz ustawić URI (lub adres URL), na który zostanie wysłane żądanie http. Przykład:
HttpRequest request = HttpRequest.newBuilder()
.uri( URI.create(“http://codegym.cc”) )
.build();
Nawiasem mówiąc, możesz nieco skrócić ten kod, przekazując URI bezpośrednio do metody newBuilder() :
HttpRequest request = HttpRequest.newBuilder( URI.create(“http://codegym.cc”) ).build();
Ważny! Identyfikator URI można utworzyć na dwa sposoby:
- nowy URI(ciąg znaków)
- URI.create(String)
Preferowany jest drugi sposób. Pierwszy sposób niestety nie jest zbyt dobry, ponieważ konstruktor URI jest zadeklarowany jako public URI(String str) rzuca URISyntaxException , a URISyntaxException jest sprawdzanym wyjątkiem.
Metody GET(), POST(), PUT(), DELETE()
Metodę żądania HTTP można ustawić za pomocą następujących metod:
- DOSTAWAĆ()
- POST()
- UMIEŚCIĆ()
- USUWAĆ()
Oto jak wyglądałoby proste żądanie GET:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.GET()
.build();
metoda wersja().
Możesz także ustawić wersję protokołu HTTP. Są tylko 2 opcje:
- HttpClient.Version.HTTP_1_1
- HttpClient.Version.HTTP_2
Powiedzmy, że chcesz utworzyć żądanie przy użyciu protokołu HTTP/2, wtedy będziesz musiał napisać:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.version( HttpClient.Version.HTTP_2 )
.GET()
.build();
Bardzo proste, prawda? :)
metoda timeout().
Możesz także ustawić czas wykonania zapytania. Jeśli się powiedzie, a żądanie nigdy nie zostanie zakończone, zostanie zgłoszony wyjątek HttpTimeoutException .
Sam czas jest ustawiany za pomocą obiektuczas trwaniaz API Java DateTime. Przykład:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.timeout( Duration.of(5, SECONDS) )
.GET()
.build();
Obecność tej metody pokazuje, że klasy HttpClient i HttpRequest mogą wykonywać różnorodne zadania. Wyobraź sobie, że wykonujesz żądanie i coś stało się z siecią i trwało to 30 sekund. O wiele bardziej przydatne jest natychmiastowe otrzymanie wyjątku i prawidłowa reakcja na niego.
metoda header().
Możesz także dodać dowolną liczbę nagłówków do dowolnego żądania. I jest to tak proste, jak wszystko inne. Jest na to specjalna metoda - header() . Przykład:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.header("name1", "value1")
.header("name2", "value2")
.GET()
.build();
Istnieje inny alternatywny sposób ustawienia wielu nagłówków jednocześnie. Może się przydać, jeśli na przykład przekonwertowałeś listę nagłówków na tablicę:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.headers("name1", "value1", "name2", "value2")
.GET()
.build();
Wszystko elementarne jest proste.
GO TO FULL VERSION