CodeGym/Java Course/모듈 3/새로운 HttpClient

새로운 HttpClient

사용 가능

1.1 HttpClient 소개

JDK 11부터 Java 플랫폼 개발자는 http 요청을 만들기 위해 JDK에 강력한 새 도구인 java.net.http. 여기에는 네 가지 주요 클래스가 포함되어 있습니다.

  • Http클라이언트
  • HTTP 요청
  • HttpResponse
  • 웹 소켓

HTTP이들은 , HTTP/2및 를 사용하여 가능한 모든 유형의 요청을 수행할 수 있는 매우 강력한 클래스입니다 WebSocket.

또한 이러한 클래스를 사용하여 동기 및 비동기 http 요청을 모두 수행할 수 있습니다.

http 요청 만들기는 다음 부분으로 구성됩니다.

  1. 개체 만들기HttpClient
  2. 개체 만들기HttpRequest
  3. send()or 메서드를 사용하여 요청 보내기sendAsync()
  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 선언적 접근

위의 예에서 코드 작성에 대한 소위 선언적 접근 방식의 예를 볼 수 있습니다. 예제의 첫 번째 부분을 살펴보겠습니다.

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

고전적인 스타일로 작성된 이 코드는 다음과 같습니다.

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

코드에서 선언적 접근 방식을 사용할 때 두 가지 사항이 변경됩니다. 첫째 , 모든 클래스 메서드는 HttpClient 자신의 개체를 반환하므로 체인 형태로 코드를 구성할 수 있습니다.

클래식 코드:
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코드를 훨씬 더 간결하게 작성할 수 있습니다.

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

이러한 코드는 쓰기는 어렵지만 읽기는 더 쉽습니다.

그리고 한 가지 더 중요한 점. 이 예제에서는 Builder 패턴이 사용되었습니다. 객체 생성이 복잡한 프로세스인 시나리오가 있습니다. 따라서 그들은 그것을 공식화하는 것을 선호합니다. 조건부 메서드 호출로 시작하여 begin()조건부 메서드 호출로 끝납니다 end().

우리가 분석한 예에서 메서드는 HttpClient.newBuilder()개체를 반환합니다 HttpClient.Builder(이는 클래스의 내부 유틸리티 클래스임 HttpClient). 유형의 모든 메소드는 version()이 서비스 오브젝트에서만 호출됩니다. 음, 메서드 호출은 build()개체 구성의 끝을 표시하고 개체를 반환합니다 HttpClient.

코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다