metoder newBuilder(), build()
HttpRequest- klassen brukes til å beskrive en http-forespørsel, som er lett å forstå fra navnet. Dette objektet gjør ingenting av seg selv, det inneholder bare forskjellig informasjon om http-forespørselen. Derfor, som du sikkert allerede har gjettet, brukes Builder-malen også til å lage den.
HttpRequest request = HttpRequest.newBuilder()
.method1()
.method2()
.methodN()
.build();
Hvor mellom kallene til metodene newBuilder() og build() må du kalle alle metodene for å konstruere et objektHttpRequest.
Et eksempel på en enkel forespørsel ser slik ut:
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 finne alle metodene for HttpRequest- klassen på lenken i den offisielle dokumentasjonen .
Og så vil vi analysere de mest populære av dem.
uri() metode
Ved å bruke uri()- metoden kan du angi URI (eller URL) som http-forespørselen skal sendes til. Eksempel:
HttpRequest request = HttpRequest.newBuilder()
.uri( URI.create(“http://codegym.cc”) )
.build();
Du kan forresten gjøre denne koden litt kortere ved å sende URI-en direkte til newBuilder()- metoden :
HttpRequest request = HttpRequest.newBuilder( URI.create(“http://codegym.cc”) ).build();
Viktig! En URI kan opprettes på to måter:
- nyURI(streng)
- URI.create(String)
Den andre måten er å foretrekke. Den første måten er dessverre ikke veldig bra, fordi URI-konstruktøren er erklært som offentlig URI(String str) kaster URISyntaxException , og URISyntaxException er et sjekket unntak.
Metoder GET(), POST(), PUT(), DELETE()
Du kan angi http-forespørselsmetoden ved å bruke følgende metoder:
- FÅ()
- POST()
- SETTE()
- SLETT()
Slik vil en enkel GET-forespørsel se ut:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.GET()
.build();
versjon() metode
Du kan også angi HTTP-protokollversjonen. Det er bare 2 alternativer:
- HttpClient.Version.HTTP_1_1
- HttpClient.Version.HTTP_2
La oss si at du vil opprette en forespørsel ved å bruke HTTP/2-protokollen, så må du skrive:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.version( HttpClient.Version.HTTP_2 )
.GET()
.build();
Veldig enkelt, ikke sant? :)
timeout()-metoden
Du kan også angi utførelsestiden for spørringen. Hvis den går gjennom og forespørselen aldri fullføres, vil et HttpTimeoutException bli kastet .
Selve tiden stilles inn ved hjelp av objektetvarighetfra Java DateTime API. Eksempel:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.timeout( Duration.of(5, SECONDS) )
.GET()
.build();
Tilstedeværelsen av denne metoden viser at klassene HttpClient og HttpRequest kan utføre en rekke oppgaver. Tenk deg at du utfører en forespørsel, og noe skjedde med nettverket og det varte i 30 sekunder. Det er mye mer nyttig å umiddelbart motta et unntak og reagere på det riktig.
header() metode
Du kan også legge til et hvilket som helst antall overskrifter til enhver forespørsel. Og det er like enkelt å gjøre som noe annet. Det er en spesiell metode for dette - header() . Eksempel:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.header("name1", "value1")
.header("name2", "value2")
.GET()
.build();
Det er en annen alternativ måte å sette mange overskrifter på samtidig. Det kan være nyttig hvis du for eksempel konverterte en liste med overskrifter til en matrise:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.headers("name1", "value1", "name2", "value2")
.GET()
.build();
Alt elementært er enkelt.