metoder newBuilder(), build()
HttpRequest- klassen bruges til at beskrive en http-request, som er let at forstå ud fra dens navn. Dette objekt gør intet i sig selv, det indeholder blot forskellige oplysninger om http-anmodningen. Derfor, som du sikkert allerede har gættet, bruges Builder-skabelonen også til at oprette den.
HttpRequest request = HttpRequest.newBuilder()
.method1()
.method2()
.methodN()
.build();
Hvor mellem kald til metoderne newBuilder() og build() skal du kalde alle metoderne for at konstruere et objektHttpRequest.
Et eksempel på en simpel anmodning ser sådan ud:
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 finde alle metoder i klassen HttpRequest på linket i den officielle dokumentation .
Og så vil vi analysere de mest populære af dem.
uri() metode
Ved at bruge metoden uri() kan du indstille den URI (eller URL), som http-anmodningen sendes til. Eksempel:
HttpRequest request = HttpRequest.newBuilder()
.uri( URI.create(“http://codegym.cc”) )
.build();
Forresten kan du gøre denne kode lidt kortere ved at sende URI'en direkte til newBuilder() metoden :
HttpRequest request = HttpRequest.newBuilder( URI.create(“http://codegym.cc”) ).build();
Vigtig! En URI kan oprettes på to måder:
- nyURI(streng)
- URI.create(String)
Den anden måde er at foretrække. Den første måde er desværre ikke særlig god, fordi URI-konstruktøren er erklæret som public URI(String str) kaster URISyntaxException , og URISyntaxException er en kontrolleret undtagelse.
Metoder GET(), POST(), PUT(), SLET()
Du kan indstille http-anmodningsmetoden ved at bruge følgende metoder:
- FÅ()
- STOLPE()
- SÆTTE()
- SLET()
Sådan ser en simpel GET-anmodning ud:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.GET()
.build();
version() metode
Du kan også indstille HTTP-protokolversionen. Der er kun 2 muligheder:
- HttpClient.Version.HTTP_1_1
- HttpClient.Version.HTTP_2
Lad os sige, at du vil oprette en anmodning ved hjælp af HTTP/2-protokollen, så skal du skrive:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.version( HttpClient.Version.HTTP_2 )
.GET()
.build();
Meget simpelt, er det ikke? :)
timeout() metode
Du kan også indstille forespørgselsudførelsestiden. Hvis det går igennem, og anmodningen aldrig fuldføres, vil en HttpTimeoutException blive kastet .
Selve tiden indstilles ved hjælp af objektetvarighedfra Java DateTime API. Eksempel:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.timeout( Duration.of(5, SECONDS) )
.GET()
.build();
Tilstedeværelsen af denne metode viser, at klasserne HttpClient og HttpRequest kan udføre en række opgaver. Forestil dig, at du udfører en anmodning, og der skete noget med netværket, og det varede 30 sekunder. Det er meget mere nyttigt straks at modtage en undtagelse og reagere korrekt på den.
header() metode
Du kan også tilføje et vilkårligt antal overskrifter til enhver anmodning. Og det er lige så nemt at gøre som alt andet. Der er en speciel metode til dette - header() . Eksempel:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.header("name1", "value1")
.header("name2", "value2")
.GET()
.build();
Der er en anden alternativ måde at indstille mange overskrifter på én gang. Det kan være nyttigt, hvis du for eksempel konverterede en liste over overskrifter til en matrix:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.headers("name1", "value1", "name2", "value2")
.GET()
.build();
Alt elementært er enkelt.