Belajar Java - Networking Dasar & HTTP Client
Series/Belajar Java/Episode 12
Episode 12 of 24

Belajar Java - Networking Dasar & HTTP Client

Episode ini membahas networking dan HTTP di Java: socket programming dengan java.net.Socket dan ServerSocket, HTTP API modern dengan java.net.http.HttpClient, membuat request GET dan POST, konsumsi API REST, serta asynchronous request dengan CompletableFuture.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

Hampir tidak ada aplikasi modern yang berjalan sendirian. Aplikasi berkomunikasi dengan layanan lain melalui jaringan dan HTTP. Episode 12 membahas networking dasar dan HTTP client di Java — dari socket level rendah hingga HttpClient modern untuk konsumsi API REST.

Socket Programming dengan java.net.Socket dan ServerSocket

ServerSocket: Mendengarkan Koneksi

Socket programming adalah fondasi komunikasi jaringan. ServerSocket mendengarkan koneksi masuk di sebuah port:

Server socket sederhana
import java.io.*;
import java.net.*;
 
public class ServerSederhana {
    public static void main(String[] args) throws IOException {
        try (ServerSocket server = new ServerSocket(8080)) {
            System.out.println("Menunggu koneksi di port 8080");
            try (Socket klien = server.accept();
                 PrintWriter out = new PrintWriter(klien.getOutputStream(), true)) {
                out.println("Halo dari server");
            }
        }
    }
}

server.accept() memblokir hingga ada klien yang terhubung.

Socket: Menghubungi Server

Sisi klien menggunakan Socket untuk terhubung:

Client socket
import java.io.*;
import java.net.*;
 
public class ClientSederhana {
    public static void main(String[] args) throws IOException {
        try (Socket socket = new Socket("localhost", 8080);
             BufferedReader in = new BufferedReader(
                 new InputStreamReader(socket.getInputStream()))) {
            System.out.println("Server bilang: " + in.readLine());
        }
    }
}

HTTP Client Modern dengan java.net.http

Java 11 memperkenalkan java.net.http.HttpClient yang modern — menggantikan HttpURLConnection yang kuno. HttpClient mendukung HTTP/2, request synchronous dan asynchronous, serta WebSocket:

Membangun HttpClient
import java.net.http.*;
import java.time.Duration;
 
public class ClientHttp {
    public static void main(String[] args) {
        HttpClient client = HttpClient.newBuilder()
                .connectTimeout(Duration.ofSeconds(10))
                .build();
        System.out.println("HttpClient siap");
    }
}

Request GET dan POST untuk Konsumsi API REST

Request GET

Kirim request GET dan baca respons sebagai string:

Request GET
import java.net.*;
import java.net.http.*;
 
public class GetRequest {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();
 
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://api.github.com/users/arman"))
                .header("Accept", "application/json")
                .GET()
                .build();
 
        HttpResponse<String> response = client.send(request,
                HttpResponse.BodyHandlers.ofString());
 
        System.out.println("Status: " + response.statusCode());
        System.out.println(response.body());
    }
}

client.send(request, HttpResponse.BodyHandlers.ofString()) mengirim request secara sinkron dan mengembalikan respons.

Request POST dengan JSON

Untuk mengirim data, gunakan POST dengan body JSON dan header Content-Type:

Request POST
import java.net.*;
import java.net.http.*;
 
public class PostRequest {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();
 
        String json = "{\"nama\":\"Produk Baru\",\"harga\":15000}";
 
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://api.example.com/produk"))
                .header("Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(json))
                .build();
 
        HttpResponse<String> response = client.send(request,
                HttpResponse.BodyHandlers.ofString());
        System.out.println("Status: " + response.statusCode());
    }
}

HttpRequest.BodyPublishers.ofString(json) mengemas string JSON sebagai body request.

Asynchronous Request dengan CompletableFuture

sendAsync mengirim request tanpa memblokir thread dan mengembalikan CompletableFuture:

Request asynchronous
import java.net.*;
import java.net.http.*;
import java.util.concurrent.CompletableFuture;
 
public class AsyncRequest {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();
 
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://api.example.com/data"))
                .GET()
                .build();
 
        CompletableFuture<HttpResponse<String>> future =
                client.sendAsync(request, HttpResponse.BodyHandlers.ofString());
 
        future.thenAccept(resp -> {
            System.out.println("Status: " + resp.statusCode());
            System.out.println(resp.body());
        });
 
        System.out.println("Program lanjut tanpa menunggu");
        Thread.sleep(3000);
    }
}

client.sendAsync(request, ...) mengembalikan future yang bisa dikomposisi. Callback thenAccept berjalan saat respons tiba tanpa memblokir thread utama.

Penutup

Episode 12 membekali kalian networking: socket programming dengan ServerSocket dan Socket, HttpClient modern untuk HTTP/2, request GET dan POST untuk konsumsi REST API, serta asynchronous request dengan CompletableFuture.

Inti yang harus dibawa pulang:

  • ServerSocket mendengarkan koneksi; Socket menghubungi server.
  • HttpClient modern menggantikan HttpURLConnection yang kuno.
  • client.send untuk sinkron; sendAsync untuk asynchronous.
  • Body JSON dikirim dengan BodyPublishers.ofString.
  • CompletableFuture memungkinkan request paralel tanpa memblokir thread.

Di episode 13 selanjutnya kita akan membahas keamanan aplikasi dan cryptography dasar — konsep otentikasi dan otorisasi, Java Cryptography Architecture untuk hashing dan enkripsi, manajemen key-store, secure random, dan TLS sederhana, serta best practice keamanan. Saatnya mengamankan aplikasi!