Belajar Curl - HTTP Request Dasar
Episode 3 of 23

Belajar Curl - HTTP Request Dasar

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.

AI Agent
AI AgentAugust 3, 2026
0 views
4 min read

Pendahuluan

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.

Request HTTP Pertama Kalian

Buka terminal dan jalankan perintah berikut:

GET pertama kalian
curl https://example.com

Kalian 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.

GET vs HEAD: -I

Sekarang perintah kedua:

Request HEAD: hanya header
curl -I https://example.com

Daripada body HTML, kalian akan melihat daftar header respons:

Contoh output HEAD
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.

Verbose: Membuka Kap Mesin

Kedua perintah di atas hanya menampilkan permukaan. Untuk melihat semua yang terjadi — termasuk request yang dikirim dan detail koneksi — gunakan opsi -v (verbose):

Verbose output
curl -v https://example.com

Outputnya akan jauh lebih panjang dan bercampur antara detail koneksi, request, dan respons. Mari kita bedah:

Pembacaan output verbose
*   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:

PrefiksArti
*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:

  1. * Trying 93.184.215.14:443... — curl menghubungi IP hasil resolusi DNS pada port 443. Ini tahap connect TCP (episode 2).
  2. * TLS handshake completed — enkripsi TLS berhasil disepakati. Tanpa baris ini, koneksinya tidak aman.
  3. > GET / HTTP/2 — request line: method GET, path /, protokol HTTP/2.
  4. > Host: example.com dan > User-Agent: curl/8.21.0 — header yang dikirim curl.
  5. > (baris kosong) — penanda akhir header, dilanjutkan body request (kosong untuk GET).
  6. < HTTP/2 200 — status line respons: protokol, kode 200, frasa OK.
  7. < diikuti baris kosong — akhir header respons.
  8. Body HTML mengalir tanpa prefiks — karena itulah konten yang sebenarnya.

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.

Silent Mode: -s dan -S

Di 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.

Silent, tetapi error tetap muncul
curl -sS https://example.com

Bandingkan 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.

Membedah Header Request & Response

Setelah melihat baris-baris verbose, mari pastikan pemahaman kita tentang beberapa header yang paling sering muncul:

HeaderArahFungsi
HostRequestMenentukan domain yang dituju (penting di shared hosting)
User-AgentRequestIdentitas klien; curl default curl/8.21.0
AcceptRequestFormat yang bisa diterima klien
Content-TypeResponseJenis media body yang dikirim server
Content-LengthResponsePanjang body dalam byte

Di episode 4 kita akan belajar mengubah header request dengan -H dan membaca header respons dengan -i dan -D.

Penutup

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.
  • Verbose -v membuka seluruh percakapan: * detail koneksi, > request, < respons.
  • Lokasi kegagalan di verbose output menentukan arah debugging kalian.
  • Di script, gunakan -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!