1.1 HttpClient 소개
JDK 11부터 Java 플랫폼 개발자는 http 요청을 만들기 위해 JDK에 강력한 새 도구인 java.net.http
. 여기에는 네 가지 주요 클래스가 포함되어 있습니다.
- Http클라이언트
- HTTP 요청
- HttpResponse
- 웹 소켓
HTTP
이들은 , HTTP/2
및 를 사용하여 가능한 모든 유형의 요청을 수행할 수 있는 매우 강력한 클래스입니다 WebSocket
.
또한 이러한 클래스를 사용하여 동기 및 비동기 http 요청을 모두 수행할 수 있습니다.
http 요청 만들기는 다음 부분으로 구성됩니다.
- 개체 만들기
HttpClient
- 개체 만들기
HttpRequest
send()
or 메서드를 사용하여 요청 보내기sendAsync()
- 응답 처리
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
자신의 개체를 반환하므로 체인 형태로 코드를 구성할 수 있습니다.
클래식 코드: |
---|
|
사슬로: |
|
각 메소드를 별도의 라인으로 전송합니다(이것은 하나의 긴 설명입니다). |
|
둘째 , 메서드에서 접두사가 제거되어 set
코드를 훨씬 더 간결하게 작성할 수 있습니다.
였다 |
---|
|
그것은되었다 |
|
이러한 코드는 쓰기는 어렵지만 읽기는 더 쉽습니다.
그리고 한 가지 더 중요한 점. 이 예제에서는 Builder 패턴이 사용되었습니다. 객체 생성이 복잡한 프로세스인 시나리오가 있습니다. 따라서 그들은 그것을 공식화하는 것을 선호합니다. 조건부 메서드 호출로 시작하여 begin()
조건부 메서드 호출로 끝납니다 end()
.
우리가 분석한 예에서 메서드는 HttpClient.newBuilder()
개체를 반환합니다 HttpClient.Builder
(이는 클래스의 내부 유틸리티 클래스임 HttpClient
). 유형의 모든 메소드는 version()
이 서비스 오브젝트에서만 호출됩니다. 음, 메서드 호출은 build()
개체 구성의 끝을 표시하고 개체를 반환합니다 HttpClient
.
GO TO FULL VERSION