Saat Anda membuka sebuah halaman di browser, yang terlihat hanyalah hasil akhirnya: teks, gambar, dan tombol yang sudah tersusun rapi. Percakapan yang sebenarnya terjadi antara komputer Anda dan server justru tersembunyi. Browser menyimpan salinan halaman di cache, menjalankan JavaScript, dan kadang menambahkan perilaku dari ekstensi yang terpasang. Akibatnya, saat sebuah website bermasalah, Anda kesulitan memastikan apakah penyebabnya ada di server atau di browser Anda sendiri.
Di sinilah curl mengambil peran. Curl adalah program baris perintah yang mengirim permintaan ke sebuah alamat, lalu menampilkan jawaban server apa adanya tanpa dipoles.
Curl Adalah Alat Transfer Data Lewat Baris Perintah
Curl adalah program untuk mengirim dan menerima data melalui URL, dijalankan lewat terminal tanpa antarmuka grafis. Namanya sendiri merupakan permainan kata dari Client for URLs — klien untuk URL. Jadi tugas utamanya persis seperti namanya: menjadi pihak yang meminta sesuatu dari sebuah alamat, lalu menerima balasannya.
Perjalanan namanya cukup berliku. Pada 11 November 1996, seorang pengembang Brasil bernama Rafael Sagula merilis program bernama HttpGet. Daniel Stenberg kemudian ikut mengembangkannya dan merilis versi berikutnya pada Desember di tahun yang sama. Setelah kemampuan mengunduh melalui FTP ditambahkan pada Agustus 1997, namanya berganti menjadi urlget. Barulah pada 20 Maret 1998, setelah kemampuan mengunggah masuk, program itu resmi bernama curl.
Hari ini curl bukan lagi program kecil. Proyeknya memperkirakan curl berjalan di sekitar 30 miliar instalasi di seluruh dunia pada 2025. Angka sebesar itu masuk akal karena curl ikut terpasang di ponsel, mobil, televisi, router, dan hampir semua server. Versi stabil terakhirnya adalah 8.21.0 yang dirilis pada 24 Juni 2026.
Cara Kerja Curl: Satu Permintaan, Satu Jawaban
Fungsi curl paling mudah dipahami dengan mengikuti apa yang terjadi setelah Anda menekan Enter. Prosesnya berlangsung dalam empat tahap yang berurutan.
Diagram alur kerja curl saat mengurai URL, mencari server lewat DNS, membuka koneksi, lalu menerima respons.
Mula-mula curl memecah URL menjadi bagian-bagiannya: protokol, nama host, dan jalur berkas. Nama host itu diterjemahkan menjadi alamat IP lewat DNS. Setelah alamatnya diketahui, koneksi dibuka ke web server tujuan. Kalau alamatnya memakai HTTPS, curl memverifikasi sertifikat server terlebih dahulu sebelum melanjutkan. Baru setelah itu permintaan dikirim, dan server membalas dengan kode status, sekumpulan header (informasi tambahan tentang balasan), lalu isi halamannya.
Ada dua sifat curl yang kerap mengejutkan pemakai baru. Pertama, hasilnya dicetak langsung ke layar, bukan otomatis disimpan sebagai berkas. Kedua, curl tidak mengikuti pengalihan alamat kecuali Anda memintanya secara eksplisit. Dua sifat ini sering dianggap kesalahan, padahal keduanya memang perilaku bawaan yang disengaja.
Curl Kemungkinan Sudah Terpasang di Komputer Anda
Banyak panduan memulai dengan langkah instalasi, padahal langkah itu sering tidak diperlukan. Distribusi Linux umumnya menyertakan curl sejak awal. macOS membawanya sejak Mac OS X 10.1 pada September 2001. Windows pun sudah menyertakan curl.exe sejak Windows 10 versi 1803 yang dirilis pada 2018.
Cara memastikannya cukup satu perintah:
curl --versionPerhatikan baris Protocols pada keluarannya. Baris itu menunjukkan protokol apa saja yang didukung oleh curl di mesin Anda, dan isinya berbeda-beda tergantung bagaimana curl dikompilasi. Sebagai contoh, curl bawaan macOS menampilkan hasil seperti ini:
curl 8.7.1 (x86_64-apple-darwin25.0) libcurl/8.7.1
Protocols: dict file ftp ftps gopher gophers http https imap imaps ipfs ipns
ldap ldaps mqtt pop3 pop3s rtsp smb smbs smtp smtps telnet tftpDaftar yang dicantumkan FAQ resmi curl memuat 27 protokol, tetapi versi bawaan macOS di atas hanya membawa 24. SCP dan SFTP tidak ada di sana, sementara IPFS justru tersedia. Jadi ketika sebuah perintah SFTP gagal padahal sintaksnya benar, penyebabnya bisa jadi bukan kesalahan Anda, melainkan build curl yang memang tidak menyertakan protokol tersebut.
Jebakan yang Membuat Perintah Curl Gagal di Windows
Satu hal perlu diperhatikan pengguna Windows. Pada Windows PowerShell 5.1 — versi yang masih menjadi bawaan Windows — kata curl bukan merujuk ke curl asli, melainkan menjadi alias untuk perintah Invoke-WebRequest. Keduanya adalah program berbeda dengan sintaks yang sama sekali tidak kompatibel. Akibatnya, perintah curl yang Anda salin dari panduan mana pun akan menghasilkan pesan galat yang membingungkan.
Solusinya sederhana: panggil
curl.exesecara eksplisit, bukancurl. Di PowerShell 7 ke atas alias tersebut sudah dihapus, sehinggacurllangsung menjalankan program yang benar.
Perintah Curl yang Paling Sering Dipakai
Cara menggunakan curl paling cepat dipahami kalau opsinya dikelompokkan berdasarkan kebutuhan, bukan berdasarkan urutan abjad.
Menyimpan hasil menjadi berkas. Karena curl mencetak hasil ke layar, Anda perlu menyebutkan tujuan penyimpanan. Opsi -o menentukan nama berkas sendiri, sedangkan -O memakai nama berkas asli dari server:
curl -o laporan.pdf https://contoh.com/dokumen/laporan-q3.pdf
curl -O https://contoh.com/dokumen/laporan-q3.pdfMengikuti pengalihan alamat. Banyak website mengalihkan pengunjung dari alamat lama ke alamat baru. Tanpa opsi -L, curl berhenti di pengalihan pertama dan hanya menampilkan halaman kosong:
curl -L https://contoh.com/promoMelihat header saja. Opsi -I meminta curl mengambil header tanpa mengunduh isi halaman. Ini berguna saat Anda hanya ingin tahu status sebuah alamat:
curl -I https://contoh.com/Mengirim data ke server. Untuk menguji API, Anda perlu mengirim data dan menyesuaikan metode permintaan. Opsi -d mengirim isi data, -X menentukan metode, dan -H menambahkan header — misalnya untuk menyatakan bahwa isi yang dikirim berformat JSON:
curl -X POST https://api.contoh.com/pengguna \
-H "Content-Type: application/json" \
-d '{"nama":"Budi","email":"budi@contoh.com"}'Pola inilah yang paling sering Anda temui saat bekerja dengan REST API.
Autentikasi dan penelusuran masalah. Opsi -u mengirim nama pengguna dan kata sandi, -s menyembunyikan indikator kemajuan agar keluaran bersih, dan -v menampilkan seluruh detail permintaan serta balasan:
curl -u admin:rahasia https://contoh.com/area-terbatas
curl -v https://contoh.com/Keluaran -v menandai baris yang dikirim curl dengan tanda > dan baris balasan server dengan tanda <. Membiasakan diri membaca dua tanda ini akan sangat membantu saat menelusuri masalah.
Membaca Kondisi Website dengan Curl
Bagian ini yang membuat curl lebih berharga daripada sekadar pengunduh berkas. Karena curl tidak memakai cache dan tidak menjalankan JavaScript, apa yang Anda lihat benar-benar berasal dari server.
Memeriksa status sebenarnya. Halaman yang tampak normal di browser bisa saja mengirim kode status yang keliru — misalnya halaman "tidak ditemukan" yang justru mengembalikan status 200. Kekeliruan seperti ini merugikan dari sisi pengindeksan mesin pencari, dan hanya terlihat lewat header.
Menelusuri rantai pengalihan. Kombinasi -I, -L, dan -s menampilkan seluruh rangkaian pengalihan dari alamat awal sampai tujuan akhir:
curl -ILs https://contoh.com/ | grep -E "HTTP/|location:"Rantai yang sehat berisi satu atau dua langkah. Rantai yang panjang menandakan pemborosan, misalnya dari HTTP ke HTTPS, lalu ke www, lalu ke alamat dengan garis miring di akhir. Setiap langkah tambahan berarti satu perjalanan bolak-balik lagi ke server sebelum halaman mulai tampil.
Memecah waktu koneksi. Opsi -w mencetak variabel pengukuran setelah transfer selesai. Ini cara paling langsung untuk mengetahui bagian mana yang lambat:
curl -o /dev/null -s -w "DNS: %{time_namelookup}s\nKoneksi: %{time_connect}s\nTLS: %{time_appconnect}s\nByte pertama: %{time_starttransfer}s\nTotal: %{time_total}s\n" https://contoh.com/Sebagai patokan kasar dari lokasi Indonesia ke server dalam negeri, waktu DNS di bawah 0,1 detik dan koneksi di bawah 0,15 detik masih wajar. Byte pertama yang tiba di bawah 0,5 detik tergolong sehat, sedangkan angka di atas 1 detik menandakan pemrosesan di sisi server perlu ditelusuri. Kalau selisih terbesar justru ada di tahap TLS, perhatian sebaiknya diarahkan ke konfigurasi HTTPS, bukan ke aplikasinya.
Diagram empat tahap waktu koneksi curl dalam satu batang: DNS, koneksi, TLS, lalu byte pertama.
Menguji server tujuan sebelum DNS diarahkan. Saat memindahkan website ke server baru, Anda tentu ingin memastikan server itu sudah melayani dengan benar sebelum mengubah pengaturan DNS. Opsi --resolve memaksa curl menghubungi alamat IP tertentu, seolah-olah DNS sudah diarahkan ke sana:
curl -I --resolve contoh.com:443:203.0.113.10 https://contoh.com/Curl dan Wget: Dua Alat yang Sering Tertukar
Keduanya sama-sama mengambil data dari sebuah alamat lewat terminal, sehingga sering dianggap saling menggantikan. Penulis curl sendiri menegaskan bahwa curl bukan tiruan wget, dan keduanya memang dirancang untuk pekerjaan yang berbeda.
Curl unggul dalam beberapa hal. Ia ditopang libcurl sehingga bisa dipakai sebagai pustaka di dalam aplikasi, sementara wget hanya berupa program terminal. Curl mendukung lebih dari 20 protokol, sedangkan wget hanya HTTP, HTTPS, dan FTP. Curl juga memahami HTTP versi 0.9 sampai HTTP/3, sementara wget berhenti di HTTP/1.1.
Perbedaannya makin terasa pada urusan mengunggah dan autentikasi. Selain metode Basic, curl mendukung Digest, NTLM, Negotiate, hingga tanda tangan AWS. Wget hanya mendukung Basic.
Sebaliknya, ada satu kemampuan wget yang tidak dimiliki curl sama sekali: mengunduh secara rekursif. Wget bisa menelusuri tautan di sebuah halaman lalu mengunduh semua yang tersambung dengannya, sehingga cocok untuk menyalin keseluruhan situs. Wget juga langsung menyimpan hasilnya menjadi berkas tanpa opsi tambahan.
Diagram perbandingan curl dan wget: banyak protokol dan unggah data, berhadapan dengan unduh rekursif dan salin situs.
Panduan memilihnya menjadi sederhana. Untuk memeriksa satu alamat, menguji API, mengirim data, atau menelusuri masalah koneksi, gunakan curl. Untuk menyalin banyak berkas sekaligus atau mencadangkan seluruh isi sebuah situs, gunakan wget.
libcurl: Curl yang Tertanam di Dalam Aplikasi
Curl sebenarnya terdiri atas dua produk. Yang pertama adalah program terminal bernama curl. Yang kedua adalah libcurl, yaitu pustaka yang mengerjakan seluruh proses transfer dan bisa dipanggil dari dalam program lain.
Pembedaan ini penting karena libcurl jauh lebih luas pemakaiannya daripada yang disadari kebanyakan orang. Fungsi curl_init() dan curl_exec() yang Anda pakai di PHP sesungguhnya adalah libcurl — dukungan itu masuk sejak PHP 4.0.2 pada Agustus 2000. Artinya, kode PHP yang memanggil API menjalankan mesin yang sama persis dengan perintah yang Anda ketik di terminal.
Kemiripannya bahkan terlihat pada penamaan opsi:
$ch = curl_init('https://api.contoh.com/produk');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer TOKEN']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$respons = curl_exec($ch);
curl_close($ch);CURLOPT_HTTPHEADER sepadan dengan -H, dan CURLOPT_FOLLOWLOCATION sepadan dengan -L. Karena itu, menguji sebuah permintaan di terminal lebih dahulu adalah cara tercepat memastikan masalahnya ada di kode PHP atau di server tujuan.
Kelemahan dan Hal yang Perlu Anda Pertimbangkan
Curl bukan pengganti browser, dan memperlakukannya seperti browser akan menimbulkan kebingungan.
- Curl tidak menjalankan JavaScript: halaman yang isinya dibentuk oleh framework seperti React atau Vue akan tampak nyaris kosong saat diambil dengan curl. Yang Anda terima adalah kerangka HTML awal, bukan tampilan akhir yang dilihat pengunjung.
- Cookie tidak disimpan secara otomatis: setiap perintah curl berdiri sendiri. Untuk alur yang membutuhkan sesi login, Anda perlu menyimpan dan memuat cookie secara manual memakai opsi
-cdan-b. - Opsi
-kmematikan pemeriksaan keamanan: opsi ini membuat curl menerima sertifikat apa pun, termasuk yang tidak sah. Ia berguna untuk menguji server internal dengan sertifikat buatan sendiri, tetapi memakainya pada alamat publik berarti membuang perlindungan yang justru menjadi alasan HTTPS ada.
Satu kebiasaan lain juga layak diperhatikan. Banyak panduan instalasi menyarankan pola curl ... | bash, yaitu mengunduh skrip lalu langsung menjalankannya. Pola ini praktis, tetapi berarti Anda menjalankan kode yang belum pernah Anda lihat. Kebiasaan yang lebih aman adalah mengunduhnya dahulu dengan -o, membaca isinya, baru menjalankannya.
Bagaimana dengan keamanan curl sendiri? Proyeknya mencatat 206 kerentanan sejak tahun 2000, dan angka itu kadang dijadikan alasan untuk meragukannya. Sebaran tingkat keparahannya justru menceritakan hal sebaliknya: 71 tergolong rendah, 93 menengah, 40 tinggi, dan hanya 2 yang berkategori kritis sepanjang lebih dari dua dekade. Yang lebih penting, seluruh catatan itu dipublikasikan terbuka lengkap dengan versi yang terdampak. Konsekuensinya bagi Anda hanya satu: pakai versi yang masih diperbarui, dan jangan biarkan curl pada sistem produksi tertinggal bertahun-tahun.
Pertanyaan yang Sering Muncul
Apakah curl gratis? Ya. Curl memakai lisensi turunan MIT, sehingga bebas dipakai termasuk untuk keperluan komersial, dengan syarat pemberitahuan hak cipta tetap disertakan.
Apa bedanya penulisan "curl" dan "cURL"? Tidak ada perbedaan produk. Penulisan resmi proyeknya memakai huruf kecil semua, sedangkan bentuk "cURL" biasanya dipakai untuk menonjolkan kepanjangannya, yaitu Client URL.
Apakah curl bisa dipakai di Windows tanpa memasang apa pun?
Bisa, selama Windows Anda versi 10 build 1803 ke atas. Di Windows PowerShell 5.1, panggil curl.exe agar tidak tertukar dengan perintah bawaan PowerShell.
Kenapa layar penuh karakter aneh saat saya mengunduh berkas?
Karena curl mencetak hasilnya ke layar secara bawaan, dan isi berkas biner terbaca sebagai karakter acak. Tambahkan -o atau -O supaya hasilnya disimpan menjadi berkas.
Apakah curl bisa menggantikan Postman? Untuk pengujian cepat dan otomatisasi lewat skrip, curl umumnya lebih praktis. Postman tetap lebih unggul saat Anda perlu menyimpan kumpulan permintaan, membuat dokumentasi, dan berbagi pengujian dengan anggota tim lain.
Kesimpulan
Curl adalah alat transfer data lewat URL yang nilainya bukan terletak pada kemampuan mengunduh berkas, melainkan pada kemampuannya memperlihatkan percakapan dengan server apa adanya. Kode status, header, rantai pengalihan, dan waktu tiap tahap koneksi menjadi terbaca. Hal-hal itu sulit dipastikan lewat browser karena cache dan JavaScript ikut memengaruhi hasilnya.
Gunakan curl saat Anda perlu memeriksa satu alamat, menguji API, atau menelusuri penyebab lambatnya sebuah website. Untuk menyalin banyak berkas sekaligus atau mencadangkan seluruh isi situs, wget adalah pilihan yang lebih tepat. Karena curl hampir pasti sudah terpasang di komputer Anda, jarak antara membaca artikel ini dan mencobanya sendiri hanya sejauh satu perintah.
Semoga artikel ini membantu.




