Menjalankan request HTTP pertama dengan curl: memahami output body pada GET, perbedaan dengan HEAD, serta membedah verbose mode untuk membaca alur request dan respons baris demi baris.

Setelah di episode 2 kita membedah arsitektur curl — dari parsing URL hingga enam tahap transfer — saatnya episode paling praktis: menjalankan request HTTP yang sesungguhnya. Episode ini adalah tonggak, karena mulai dari sini semua perintah yang kalian pelajari langsung bisa dipakai untuk hal nyata: memeriksa website, menguji API, dan memastikan server berfungsi.
Semua yang kita lakukan di episode ini berawal dari satu perintah yang luar biasa sederhana. Tapi jangan tertipu kesederhanaannya — di balik satu baris itu, ada seluruh konsep yang sudah kita bangun di dua episode sebelumnya. Kita akan menjalankan GET pertama, memahami apa yang ditampilkan, lalu belajar "membuka kap mesin" dengan verbose mode.
Buka terminal dan jalankan perintah berikut:
curl https://example.comKalian akan melihat HTML mentah dari example.com mengalir di layar. Inilah body dari respons HTTP — persis seperti yang dijelaskan di episode 0. Kenapa example.com? Karena domain ini sengaja dicadangkan IANA untuk dokumentasi — stabil, ringan, dan selalu tersedia, jadi aman untuk latihan. Karena outputnya mengalir ke stdout, kalian bisa langsung menyalurkannya ke perintah lain, misalnya curl -s https://example.com | wc -l untuk menghitung barisnya.
Kenapa hasilnya mentah, bukan halaman cantik seperti di browser? Karena curl adalah klien HTTP, bukan browser: ia tidak mengeksekusi JavaScript, tidak memuat CSS, tidak merender apa pun. Yang kalian lihat adalah persis apa yang dikirim server — bersih, tanpa tambahan. Ini justru kekuatan curl: kalian melihat data asli, bukan hasil render.
-ISekarang perintah kedua:
curl -I https://example.comDaripada body HTML, kalian akan melihat daftar header respons:
HTTP/2 200
accept-ranges: bytes
content-type: text/html; charset=UTF-8
content-length: 1256
server: ECAcc (dcd/7D17)Perbedaan intinya: -I mengirim method HEAD — server menjawab hanya dengan header, tanpa mengirim body. Ini seperti menelepon toko dan bertanya "apakah stoknya ada?" tanpa memesan barangnya.
Penting untuk dipahami: -I bukan sekadar "sembunyikan body" dari request GET biasa. Ia benar-benar mengubah method yang dikirim menjadi HEAD. Konsekuensinya, server bisa merespons secara berbeda — misalnya sebagian server melakukan logika khusus untuk HEAD. Untuk health check sederhana, HEAD adalah pilihan yang ringan dan tepat.
Tip
Jadikan curl -I https://example.com kebiasaan untuk health check cepat: ia murah (tanpa body), cepat, dan cukup untuk memastikan server hidup serta kode statusnya baik. Jika hanya ingin melihat header dari request yang benar-benar GET, gunakan -i yang akan kita bahas di episode 4.
Kedua perintah di atas hanya menampilkan permukaan. Untuk melihat semua yang terjadi — termasuk request yang dikirim dan detail koneksi — gunakan opsi -v (verbose):
curl -v https://example.comOutputnya akan jauh lebih panjang dan bercampur antara detail koneksi, request, dan respons. Mari kita bedah:
* Trying 93.184.215.14:443...
* Connected to example.com (93.184.215.14) port 443
* ALPN: offers h2
* TLS handshake completed
> GET / HTTP/2
> Host: example.com
> User-Agent: curl/8.21.0
>
< HTTP/2 200
< content-type: text/html; charset=UTF-8
< content-length: 1256
<
<!doctype html>
<html>...Tiga prefiks menentukan jenis baris:
| Prefiks | Arti |
|---|---|
* | Informasi internal curl: koneksi, DNS, TLS |
> | Baris yang dikirim curl ke server (request) |
< | Baris yang diterima curl dari server (respons) |
Mari kita baca baris demi baris:
* Trying 93.184.215.14:443... — curl menghubungi IP hasil resolusi DNS pada port 443. Ini tahap connect TCP (episode 2).* TLS handshake completed — enkripsi TLS berhasil disepakati. Tanpa baris ini, koneksinya tidak aman.> GET / HTTP/2 — request line: method GET, path /, protokol HTTP/2.> Host: example.com dan > User-Agent: curl/8.21.0 — header yang dikirim curl.> (baris kosong) — penanda akhir header, dilanjutkan body request (kosong untuk GET).< HTTP/2 200 — status line respons: protokol, kode 200, frasa OK.< diikuti baris kosong — akhir header respons.Important
Saat debugging gagal, verbose mode adalah saksi mata pertama kalian. Perhatikan di tahap mana kegagalan terjadi: tidak ada baris Connected berarti masalah DNS/network; ada TLS handshake completed tetapi tidak ada < HTTP/... berarti masalah aplikasi server. Arahkan debugging berdasarkan lokasi kegagalan, bukan menebak-nebak.
-s dan -SDi dunia script, output verbose yang panjang justru mengganggu. Curl menyediakan dua opsi untuk mengendalikan kebisingan:
-s (--silent) — mematikan progress meter dan pesan error.-S (--show-error) — tetap menampilkan error meski -s aktif.Kombinasi paling populer di script adalah -sS: sunyi dari progress bar, tapi tetap berteriak saat gagal.
curl -sS https://example.comBandingkan dengan -s murni: jika terjadi error, -s akan diam total — dan script kalian tidak akan tahu apa yang terjadi. Itulah kenapa kombinasi -sS hampir selalu lebih baik daripada -s sendirian.
Caution
-s bukanlah pereda "kebisingan body" — ia hanya mematikan progress meter dan error. Untuk menghilangkan body (misalnya hanya ingin tahu exit code), kombinasi curl -s -o /dev/null URL plus pengecekan exit code adalah pola yang rapi — idiom favorit di dunia scripting yang akan sering kalian jumpai.
Setelah melihat baris-baris verbose, mari pastikan pemahaman kita tentang beberapa header yang paling sering muncul:
| Header | Arah | Fungsi |
|---|---|---|
Host | Request | Menentukan domain yang dituju (penting di shared hosting) |
User-Agent | Request | Identitas klien; curl default curl/8.21.0 |
Accept | Request | Format yang bisa diterima klien |
Content-Type | Response | Jenis media body yang dikirim server |
Content-Length | Response | Panjang body dalam byte |
Di episode 4 kita akan belajar mengubah header request dengan -H dan membaca header respons dengan -i dan -D.
Pada episode 3 ini, kalian telah menjalankan request HTTP pertama: GET yang menampilkan body ke stdout, HEAD dengan -I yang hanya mengambil header, membaca verbose output dengan -v baris demi baris (mengenali prefiks *, >, <), serta mengendalikan kebisingan dengan -s dan -S.
Inti yang harus dibawa pulang:
curl URL menampilkan body ke stdout; curl bukan browser, jadi hasilnya mentah.-I mengirim method HEAD — hanya header, cocok untuk health check.-v membuka seluruh percakapan: * detail koneksi, > request, < respons.-sS — sunyi tapi tetap memberi kabar saat gagal.Di episode 4 selanjutnya kita akan membahas headers, response & redirect handling — mengirim dan menimpa header request dengan -H, menampilkan serta menyimpan header respons dengan -i dan -D, mengikuti redirect dengan -L, dan mengelola cookie dengan -b dan -c. Sampai jumpa di episode 4!