CodeGym /Java курс /Модул 3 /Нов HttpClient

Нов HttpClient

Модул 3
Ниво , Урок
На разположение

1.1 Въведение в HttpClient

Започвайки с JDK 11, разработчиците на платформата Java добавиха мощен нов инструмент към JDK за пequalsе на http заявки, java.net.http. Той съдържа четири ключови класа:

  • HttpClient
  • HttpRequest
  • HttpResponse
  • уеб гнездо

Това са много мощни класове, които ви позволяват да изпълнявате всички възможни типове заявки с помощта на HTTP, HTTP/2и WebSocket.

Освен това можете да използвате тези класове, за да правите Howто синхронни, така и асинхронни http заявки.

Пequalsето на http заявка се състои от следните части:

  1. Създайте обектHttpClient
  2. Създайте обектHttpRequest
  3. Изпращане на заявка чрез метода send()orsendAsync()
  4. Обработка на отговоритеHttpResponse

Пример за такова искане:


 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 Декларативен подход

В примера по-горе виждате пример за така наречения декларативен подход за писане на code. Нека да разгледаме първата част от примера:


 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();

Как ще изглежда този code, написан в класически стил:


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());

Когато използвате декларативния подход в codeа, две неща се променят. Първо , всички методи на класа HttpClient връщат свой собствен обект , което ви позволява да организирате codeа под формата на вериги.

Класически code:

HttpClient client = HttpClient.new();
client.setVersion(Version.HTTP_1_1);
client.setFollowRedirects(Redirect.NORMAL);
client.setConnectTimeout(Duration.ofSeconds(20));
client.setAuthenticator(Authenticator.getDefault());
Като верига:

HttpClient client = HttpClient.new() .setVersion(Version.HTTP_1_1) .setFollowRedirects(Redirect.NORMAL). setConnectTimeout(Duration.ofSeconds(20)) .setAuthenticator(Authenticator.getDefault());
Прехвърляме всеки метод на отделен ред (това е един дълъг израз)

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

Второ , префиксът е премахнат от методите set, което ви позволява да пишете code още по-компактно:

Беше

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

Стана

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

Такъв code е по-лесен за четене, но по-труден за писане.

И още един важен момент. В този пример е използван моделът Builder. Има сценарии, при които създаването на обект е сложен процес. Затова те предпочитат да го формализират: започва с извикване на условен метод begin()и завършва с извикване на условен метод end().

В примера, който анализирахме, методът HttpClient.newBuilder()връща обект HttpClient.Builder(това е вътрешен полезен клас на класа HttpClient). Всички методи от типа version()се извикват само на този обслужващ обект. Е, извикването на метода build()маркира края на конструкцията на обекта и връща обекта HttpClient.

Коментари
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION