Java 11, HTTP Client API

Java 11부터는 별도의 외부 라이브러리 없이도 Java에서 기본적으로 제공하는 HTTP Client API를 통해 거의 대부분의 네트워크 통신(클라이언트에서 서버로의 요청) 기능을 처리할 수 있습니다.

이 API는 HttpURLConnection을 대체하기 위해 설계되었으며, HTTP/1.1과 HTTP/2, 동기/비동기 통신, WebSocket, Proxy, Authentication, TLS/SSL, HTTP/2 Server Push 등을 지원합니다.

예를들어서 GET 방식의 동기적 요청은 다음 코드와 같습니다.

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class App {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://example.com"))
                .GET()
                .build();

        HttpResponse<String> response = client.send(
                request,
                HttpResponse.BodyHandlers.ofString()
        );

        System.out.println("Status: " + response.statusCode());
        System.out.println("Headers: " + response.headers());
        System.out.println("Body:" + response.body());
    }
}

17번 코드의 send 매서드에 지정한 2번째 인자는 body를 문자열로 받겠다는 의도입니다.

POST 방식의 동기적 요청에 대한 코드 예시는 다음과 같습니다.

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class App {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();

        String json = """
                {
                    "name": "Tom",
                    "age": 20
                }
                """;

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://example.com/users"))
                .header("Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(json))
                .build();

        HttpResponse<String> response = client.send(
                request,
                HttpResponse.BodyHandlers.ofString());

        System.out.println(response.statusCode());
        System.out.println(response.body());
    }
}

위의 코드는 동기적 요청인데, 비동기적 요청 방식으로 변경하면 다음과 같습니다.

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class App {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();

        String json = """
                {
                    "name": "Tom",
                    "age": 20
                }
                """;

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://example.com/users"))
                .header("Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(json))
                .build();

        client.sendAsync(
                request,
                HttpResponse.BodyHandlers.ofString())
                .thenAccept(response -> {
                    System.out.println(response.statusCode());
                    System.out.println(response.body());
                })
                .join();
    }
}

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다