metoder newBuilder(), build()
Klassen HttpRequest används för att beskriva en http-request, som är lätt att förstå utifrån namnet. Detta objekt gör ingenting av sig självt, det innehåller bara olika information om http-förfrågan. Därför, som du säkert redan gissat, används Builder-mallen också för att skapa den.
HttpRequest request = HttpRequest.newBuilder()
.method1()
.method2()
.methodN()
.build();
Där mellan anrop till metoderna newBuilder() och build() måste du anropa alla metoder för att konstruera ett objektHttpRequest.
Ett exempel på en enkel begäran ser ut så här:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(“http://codegym.cc”))
.build();
HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
Du kan hitta alla metoder för klassen HttpRequest på länken i den officiella dokumentationen .
Och sedan kommer vi att analysera de mest populära av dem.
uri() metod
Med metoden uri() kan du ställa in den URI (eller URL) som http-förfrågan ska skickas till. Exempel:
HttpRequest request = HttpRequest.newBuilder()
.uri( URI.create(“http://codegym.cc”) )
.build();
Förresten, du kan göra den här koden lite kortare genom att skicka URI:n direkt till metoden newBuilder() :
HttpRequest request = HttpRequest.newBuilder( URI.create(“http://codegym.cc”) ).build();
Viktig! En URI kan skapas på två sätt:
- newURI(String)
- URI.create(String)
Det andra sättet är att föredra. Det första sättet är tyvärr inte särskilt bra, eftersom URI-konstruktorn är deklarerad som public URI(String str) kastar URISyntaxException , och URISyntaxException är ett kontrollerat undantag.
Metoder GET(), POST(), PUT(), DELETE()
Du kan ställa in http-förfrågningsmetoden med följande metoder:
- SKAFFA SIG()
- POSTA()
- SÄTTA()
- RADERA()
Så här skulle en enkel GET-förfrågan se ut:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.GET()
.build();
version() metod
Du kan också ställa in HTTP-protokollversionen. Det finns bara 2 alternativ:
- HttpClient.Version.HTTP_1_1
- HttpClient.Version.HTTP_2
Låt oss säga att du vill skapa en begäran med hjälp av HTTP/2-protokollet, då måste du skriva:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.version( HttpClient.Version.HTTP_2 )
.GET()
.build();
Väldigt enkelt, eller hur? :)
timeout() metod
Du kan också ställa in körningstiden för frågan. Om det går igenom och begäran aldrig slutförs, kommer ett HttpTimeoutException att kastas .
Själva tiden ställs in med hjälp av objektetvaraktighetfrån Java DateTime API. Exempel:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.timeout( Duration.of(5, SECONDS) )
.GET()
.build();
Närvaron av denna metod visar att klasserna HttpClient och HttpRequest kan utföra en mängd olika uppgifter. Föreställ dig att du kör en begäran och något hände med nätverket och det varade i 30 sekunder. Det är mycket mer användbart att omedelbart få ett undantag och reagera på det korrekt.
header() metod
Du kan också lägga till valfritt antal rubriker till varje begäran. Och det är lika lätt att göra som allt annat. Det finns en speciell metod för detta - header() . Exempel:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.header("name1", "value1")
.header("name2", "value2")
.GET()
.build();
Det finns ett annat alternativt sätt att ställa in många rubriker samtidigt. Det kan vara praktiskt om du till exempel konverterade en lista med rubriker till en array:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.headers("name1", "value1", "name2", "value2")
.GET()
.build();
Allt elementärt är enkelt.