java.net.http.HttpClient
Kirim permintaan sinkron.
java.net.http.HttpClient adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Klien HTTP Modern
Sejak Java 11, JDK menyertakan klien HTTP modern dalam paket java.net.http. Klien ini menggantikan HttpURLConnection lama dengan API yang rapi dan mendukung pemanggilan berantai untuk HTTP/1.1 dan HTTP/2.
Tiga jenis intinya adalah:
- HttpClient — mengirim permintaan dan mengelola konfigurasi (batas waktu, proksi, dan pengalihan).
- HttpRequest — deskripsi yang tidak dapat diubah tentang hal yang akan dikirim.
- HttpResponse — hasilnya, termasuk status, header, dan isi.
Membuat HttpClient
Anda membuat klien dengan metode statis newBuilder(). Satu klien dapat digunakan kembali untuk banyak permintaan dan aman untuk banyak utas.
Di sini kita mengonfigurasi HTTP/2 dan batas waktu koneksi. newHttpClient() juga tersedia untuk membuat instans bawaan dengan cepat.
import java.net.http.HttpClient;
import java.time.Duration;
public class Main {
public static void main(String[] args) {
HttpClient client = HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_2)
.connectTimeout(Duration.ofSeconds(10))
.build();
System.out.println("Client version: " + client.version());
}
}Membangun Permintaan
HttpRequest bersifat tidak dapat diubah dan dibuat dengan pembangun berantai. Minimal, Anda perlu memberikan URI; secara bawaan, permintaan ini melakukan GET.
Anda mengonversi string menjadi URI dengan URI.create(...).
import java.net.URI;
import java.net.http.HttpRequest;
public class Main {
public static void main(String[] args) {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com/data"))
.GET()
.build();
System.out.println("Method: " + request.method());
System.out.println("URI: " + request.uri());
}
}Mengirim Secara Sinkron
Metode send memblokir utas pemanggil hingga respons tiba. Metode ini memerlukan BodyHandler yang memberi tahu klien cara menafsirkan isi respons.
BodyHandlers.ofString() membaca isi tersebut ke dalam String.
import java.net.URI;
import java.net.http.*;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.build();
HttpResponse<String> response =
client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("Status: " + response.statusCode());
}
}Membaca Kode Status
Respons menyediakan statusCode() sebagai int. Kode dalam rentang 2xx berarti berhasil, 3xx berarti pengalihan, 4xx berarti kesalahan klien, dan 5xx berarti kesalahan server.
Catatan: klien HTTP tidak pernah melempar pengecualian untuk respons 4xx/5xx — Anda harus memeriksa kodenya sendiri.
public class Main {
public static void main(String[] args) {
int status = 404;
String label;
if (status >= 200 && status < 300) label = "Success";
else if (status >= 300 && status < 400) label = "Redirect";
else if (status >= 400 && status < 500) label = "Client error";
else label = "Server error";
System.out.println(status + " -> " + label);
}
}Membaca Isi
Dengan BodyHandlers.ofString(), response.body() mengembalikan String. Handler lain tersedia untuk byte, berkas, dan aliran (akan dibahas nanti).
Cuplikan ini menyimulasikan konten yang akan Anda terima.
public class Main {
public static void main(String[] args) {
String body = "{\"message\":\"hello\"}";
System.out.println("Body length: " + body.length());
System.out.println("Body: " + body);
}
}Menangani Pengalihan
Secara bawaan, klien not mengikuti pengalihan. Konfigurasikan hal ini pada pembangun dengan followRedirects(...).
Opsi dalam HttpClient.Redirect adalah NEVER, ALWAYS, dan NORMAL (mengikuti pengalihan kecuali penurunan dari HTTPS ke HTTP).
import java.net.http.HttpClient;
public class Main {
public static void main(String[] args) {
HttpClient client = HttpClient.newBuilder()
.followRedirects(HttpClient.Redirect.NORMAL)
.build();
System.out.println("Redirect policy: " + client.followRedirects());
}
}Batas Waktu per Permintaan
Batas waktu koneksi berada pada klien. Batas waktu request (berapa lama menunggu respons) berada pada permintaan melalui timeout(...).
Jika batas waktu tersebut terlampaui, send melempar HttpTimeoutException.
import java.net.URI;
import java.net.http.HttpRequest;
import java.time.Duration;
public class Main {
public static void main(String[] args) {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.timeout(Duration.ofSeconds(5))
.build();
System.out.println("Timeout set: " + request.timeout().isPresent());
}
}Memeriksa Header Respons
Respons membawa objek HttpHeaders yang dapat diakses melalui headers(). Pencarian header tidak peka terhadap huruf besar-kecil dan dapat mengembalikan beberapa nilai, sehingga firstValue(...) mengembalikan Optional<String>.
import java.util.Optional;
public class Main {
public static void main(String[] args) {
// Simulating a header lookup result
Optional<String> contentType = Optional.of("application/json");
System.out.println("Content-Type: " + contentType.orElse("unknown"));
}
}Pengecualian Terperiksa
send sinkron mendeklarasikan dua pengecualian terperiksa:
- IOException — kegagalan jaringan atau protokol.
- InterruptedException — utas yang sedang diblokir mengalami interupsi.
Anda harus menangkap atau mendeklarasikan keduanya. Panggilan asinkron (pada pelajaran berikutnya) menghindari hal ini dengan mengembalikan sebuah future.
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
// client.send(...) would go here
throw new IOException("connection refused");
} catch (IOException e) {
System.out.println("Network problem: " + e.getMessage());
}
}
}Klien yang Dapat Digunakan Kembali
Praktik terbaik: buat one HttpClient lalu gunakan kembali di seluruh aplikasi. Klien ini mengumpulkan koneksi dalam kumpulan dan sepenuhnya aman untuk digunakan oleh banyak utas.
Membuat klien baru untuk setiap permintaan memboroskan sumber daya dan menghilangkan manfaat multiplexing HTTP/2.
import java.net.http.HttpClient;
public class Main {
private static final HttpClient SHARED = HttpClient.newHttpClient();
public static void main(String[] args) {
System.out.println("Shared client ready: " + (SHARED != null));
}
}Uji Cepat
Uji pemahaman Anda tentang klien HTTP sinkron.
Rangkuman
Anda telah mempelajari dasar-dasar klien HTTP JDK:
- HttpClient.newBuilder() mengonfigurasi versi, batas waktu, dan pengalihan; gunakan kembali satu instans.
- HttpRequest.newBuilder().uri(...).GET() membangun permintaan yang tidak dapat diubah.
- client.send(request, BodyHandlers.ofString()) memblokir dan mengembalikan
HttpResponse<String>. - Baca hasilnya dengan
statusCode(),body(), danheaders(). - Kode selain 2xx tidak melempar pengecualian — periksa sendiri.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “java.net.http.HttpClient” gratis?
Ya — teks lengkap “java.net.http.HttpClient” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “java.net.http.HttpClient”?
Kirim permintaan sinkron. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “java.net.http.HttpClient” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- java.net.http.HttpClient
- Permintaan Asinkron
- Body dan Header Permintaan
- Menangani Respons