CodeGym /Java kursus /Modul 3 /Ny HttpClient

Ny HttpClient

Modul 3
Niveau , Lektie
Ledig

1.1 Introduktion til HttpClient

Fra og med JDK 11 tilføjede udviklerne af Java-platformen et kraftfuldt nyt værktøj til JDK til at lave http-anmodninger, java.net.http. Den indeholder fire nøgleklasser:

  • HttpClient
  • HttpRequest
  • HttpResponse
  • web socket

Disse er meget kraftfulde klasser, der giver dig mulighed for at udføre alle mulige typer anmodninger ved hjælp af HTTP, HTTP/2og WebSocket.

Derudover kan du bruge disse klasser til at lave både synkrone og asynkrone http-anmodninger.

At lave en http-anmodning består af følgende dele:

  1. Opret et objektHttpClient
  2. Opret et objektHttpRequest
  3. Sender en anmodning ved hjælp af send()eller metodensendAsync()
  4. SvarbehandlingHttpResponse

Et eksempel på en sådan anmodning:


 HttpClient client = HttpClient.newBuilder()
        .version(Version.HTTP_1_1)
        .followRedirects(Redirect.NORMAL)
        .connectTimeout(Duration.ofSeconds(20))
        .proxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80)))
        .authenticator(Authenticator.getDefault())
        .build();
 
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body()); 

1.2 Deklarativ tilgang

I eksemplet ovenfor ser du et eksempel på den såkaldte deklarative tilgang til at skrive kode. Lad os tage et kig på den første del af eksemplet:


 HttpClient client = HttpClient.newBuilder()
.version(Version.HTTP_1_1)
.followRedirects(Redirect.NORMAL)
.connectTimeout(Duration.ofSeconds(20))
.proxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80)))
.authenticator(Authenticator.getDefault())
.build();

Hvordan denne kode ville se ud skrevet i klassisk stil:


HttpClient client = HttpClient.new();
client.setVersion(Version.HTTP_1_1);
client.setFollowRedirects(Redirect.NORMAL);
client.setConnectTimeout(Duration.ofSeconds(20));
client.setProxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80)));
client.setAuthenticator(Authenticator.getDefault());

Når man bruger den deklarative tilgang i koden, ændres to ting. For det første returnerer alle klassemetoder HttpClient deres eget objekt , som giver dig mulighed for at organisere kode i form af kæder.

Klassisk kode:

HttpClient client = HttpClient.new();
client.setVersion(Version.HTTP_1_1);
client.setFollowRedirects(Redirect.NORMAL);
client.setConnectTimeout(Duration.ofSeconds(20));
client.setAuthenticator(Authenticator.getDefault());
Som en kæde:

HttpClient client = HttpClient.new() .setVersion(Version.HTTP_1_1) .setFollowRedirects(Redirect.NORMAL). setConnectTimeout(Duration.ofSeconds(20)) .setAuthenticator(Authenticator.getDefault());
Vi overfører hver metode til en separat linje (dette er en lang erklæring)

HttpClient client = HttpClient.new()
.setVersion(Version.HTTP_1_1)
.setFollowRedirects(Redirect.NORMAL)
.setConnectTimeout(Duration.ofSeconds(20))
.setAuthenticator(Authenticator.getDefault());

For det andet fjernes præfikset fra metoderne set, hvilket giver dig mulighed for at skrive kode endnu mere kompakt:

var

HttpClient client = HttpClient.new()
.setVersion(Version.HTTP_1_1)
.setFollowRedirects(Redirect.NORMAL)
.setConnectTimeout(Duration.ofSeconds(20))
.setAuthenticator(Authenticator.getDefault());

Det blev

HttpClient client = HttpClient.new()
.version(Version.HTTP_1_1)
.followRedirects(Redirect.NORMAL)
.connectTimeout(Duration.ofSeconds(20))
.authenticator(Authenticator.getDefault());
    

Sådan kode er lettere at læse, men sværere at skrive.

Og endnu en vigtig pointe. I dette eksempel blev Builder-mønsteret brugt. Der er scenarier, hvor det er en kompleks proces at skabe et objekt. Derfor foretrækker de at formalisere det: det starter med et betinget metodekald begin()og slutter med et betinget metodekald end().

HttpClient.newBuilder()I eksemplet, som vi analyserede, returnerer metoden et objekt HttpClient.Builder(dette er en intern nytteklasse i klassen HttpClient). Alle metoder af typen version()kaldes kun på dette serviceobjekt. Nå, opkaldet af metoden build()markerer slutningen på konstruktionen af ​​objektet og returnerer objektet HttpClient.

Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION