import com.sun.net.httpserver.HttpServer;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;

public class KlienHttpMini {
    public static void main(String[] args) throws Exception {
        // Server HTTP lokal untuk uji tanpa jaringan eksternal
        HttpServer server = HttpServer.create(new InetSocketAddress("127.0.0.1", 0), 0);
        server.createContext("/sapa", exchange -> {
            byte[] body = "halo dari server lokal".getBytes(StandardCharsets.UTF_8);
            exchange.getResponseHeaders().set("Content-Type", "text/plain; charset=utf-8");
            exchange.sendResponseHeaders(200, body.length);
            try (OutputStream os = exchange.getResponseBody()) {
                os.write(body);
            }
        });
        server.start();

        try {
            HttpClient klien = HttpClient.newHttpClient();
            HttpRequest permintaan = HttpRequest.newBuilder()
                    .uri(URI.create("http://127.0.0.1:" + server.getAddress().getPort() + "/sapa"))
                    .GET()
                    .build();

            HttpResponse<String> respons = klien.send(
                    permintaan, HttpResponse.BodyHandlers.ofString());

            System.out.println("status : " + respons.statusCode());
            System.out.println("body   : " + respons.body());
            System.out.println("versi  : " + respons.version());
            System.out.println("tipe   : " + respons.headers().firstValue("content-type").orElse("?"));
        } finally {
            server.stop(0);
        }
    }
}
