Perintah curl: cara memakai opsi, permintaan POST, dan unduh file
Perintah curl adalah alat yang mengirim permintaan ke alamat web dari terminal dan menampilkan respons apa adanya. Dengan satu baris perintah, Anda bisa memeriksa isi halaman, header, dan kode status. Saat kami mengirim permintaan curl dari server AlmaLinux 9 ke situs WordPress, alamat http menjawab dengan respons 301 yang mengarahkan ke alamat https, dan permintaan REST API tanpa autentikasi ditolak dengan 401.
1️⃣ Cara dasar memakai perintah curl dan isi respons
Jika Anda menaruh satu alamat setelah curl, curl mengirim permintaan GET ke alamat itu dan menampilkan isi respons di layar. Saat kami meminta robots.txt yang dibuat WordPress, isi file tiga baris itu keluar apa adanya.
curl https://example.com/robots.txtUser-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.phpMudah untuk mengharapkan halaman yang sama seperti saat alamat diketik di browser, tetapi yang ditampilkan curl adalah HTML mentah yang dikirim server. curl tidak menjalankan skrip dan tidak meminta gambar serta CSS secara terpisah. HTML halaman itu panjang, jadi untuk alamat halaman web kami meneruskan output ke head lewat pipe dan hanya memeriksa beberapa baris pertama.
curl -s https://example.com/ | head -n 2<!DOCTYPE html>
<html lang="ko-KR">Dengan -s, indikator progres yang ikut tercampur di layar saat output diteruskan lewat pipe akan disembunyikan. HTML yang diterima dari alamat halaman beranda saja berukuran 96.679 byte. File gambar dan skrip tidak termasuk dalam ukuran ini.
2️⃣ Memeriksa header dengan curl -I dan mengikuti pengalihan dengan -L
Dari isi respons saja Anda tidak bisa tahu apakah permintaan berhasil, jadi kode status dan header diperiksa terpisah dengan -I. -I mengirim permintaan HEAD dan hanya menampilkan header respons tanpa isi. Ini seperti memeriksa label pengiriman tanpa membuka paketnya.
curl -I https://example.com/HTTP/2 200
server: nginx/1.28.0
date: Wed, 28 Oct 2026 05:29:23 GMT
content-type: text/html; charset=UTF-8
vary: Accept-Encoding
last-modified: Tue, 27 Oct 2026 21:12:18 GMT
cache-control: max-age=0
expires: Wed, 28 Oct 2026 05:29:23 GMT
accept-ranges: none
alt-svc: h3=":443"; ma=86400[HTTP/2 200] di baris pertama adalah kode status. Di bawahnya menyusul jenis server, jenis konten, dan header terkait cache. Jika permintaan yang sama dikirim ke alamat http, muncul 301 beserta alamat https tujuan di header [Location].
curl -I http://example.com/HTTP/1.1 301 Moved Permanently
Server: nginx/1.28.0
Date: Wed, 28 Oct 2026 05:27:51 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
Location: https://example.com/Saat kami meminta alamat http tanpa opsi, curl tidak mengirim permintaan lagi ke alamat di [Location]; curl hanya menampilkan 7 baris isi respons 301 lalu berhenti.
curl http://example.com/<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.28.0</center>
</body>
</html>Dengan -L, curl mengirim permintaan lagi ke alamat di [Location]. Jika digabung dengan -I menjadi -IL, header respons 301 akan diikuti header respons 200 secara berurutan.
curl -IL http://example.com/HTTP/1.1 301 Moved Permanently
Server: nginx/1.28.0
Date: Wed, 28 Oct 2026 05:29:23 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
Location: https://example.com/
HTTP/2 200
server: nginx/1.28.0
date: Wed, 28 Oct 2026 05:29:23 GMT
content-type: text/html; charset=UTF-8
vary: Accept-Encoding
last-modified: Tue, 27 Oct 2026 21:12:18 GMT
cache-control: max-age=0
expires: Wed, 28 Oct 2026 05:29:23 GMT
accept-ranges: none
alt-svc: h3=":443"; ma=86400Di diagram berikut Anda bisa membandingkan langkah demi langkah berapa kali permintaan dikirim dan apa yang muncul di layar untuk setiap opsi.
3️⃣ Mengunduh file dengan perintah curl (-o, -O)
-O menyimpan file di folder saat ini dengan nama file terakhir pada alamat. Selama menyimpan, layar menampilkan indikator progres alih-alih isi respons.
curl -O https://example.com/wp-includes/images/w-logo-blue.png % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 3113 100 3113 0 0 178k 0 --:--:-- --:--:-- --:--:-- 190kls -l w-logo-blue.png-rw-r--r-- 1 root root 3113 Oct 28 14:29 w-logo-blue.pngSetelah diunduh, [Total] dan [Received] di indikator progres sama-sama 3113, dan ukuran file yang diperiksa dengan ls -l juga cocok: 3.113 byte.
Untuk menentukan sendiri nama file, tulis nama file setelah -o. Di bawah ini hasil menyimpan alamat halaman beranda sebagai home.html.
curl -o home.html https://example.com/ % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 96679 0 96679 0 0 4291k 0 --:--:-- --:--:-- --:--:-- 4291kls -l home.html-rw-r--r-- 1 root root 96679 Oct 28 14:29 home.html-O memakai nama file di akhir alamat apa adanya, jadi tidak cocok untuk alamat halaman yang diakhiri garis miring. Jika -O ditambahkan ke alamat halaman beranda, curl tidak menemukan nama file dan berhenti dengan galat di bawah ini.
curl -O https://example.com/curl: Remote file name has no length!
curl: (23) Failed writing received data to disk/application4️⃣ Permintaan POST curl dan pengiriman data JSON
Untuk mengirim data pada permintaan yang sejauh ini hanya membaca, gunakan -d, lalu tambahkan -H untuk menyebutkan format datanya. -d mengirim data yang ditulis setelahnya sebagai isi POST. Jika tidak ditentukan lain, [Content-Type] adalah [application/x-www-form-urlencoded].
Dengan -d, metode permintaan berubah menjadi POST, jadi [-X POST] boleh dihilangkan. Dokumentasi resmi juga menjelaskan bahwa -X biasanya tidak diperlukan.
Saat mengirim JSON, ubah [Content-Type] menjadi [application/json] dengan -H. Di bawah ini hasil mengirim permintaan pembuatan pos ke REST API WordPress tanpa autentikasi.
curl -s -X POST -H 'Content-Type: application/json' -d '{"title":"curl test"}' https://example.com/wp-json/wp/v2/posts{"code":"rest_authentication_error","message":"\uc8c4\uc1a1\ud569\ub2c8\ub2e4. REST API \uc694\uccad\uc744 \ud560 \uc218 \uc788\ub294 \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.","data":{"status":401}}Situs yang kami kirimi permintaan memblokir permintaan REST API dari pengguna yang belum login sehingga code mengembalikan [rest_authentication_error] dengan status 401. Karena pengaturan yang sama, permintaan GET daftar pos ke alamat yang sama juga mengembalikan 401. Nilai message adalah kalimat galat yang ditulis dalam bahasa situs lalu diubah ke notasi Unicode JSON.
Untuk memeriksa kode status saja, buang isi respons dengan [-o /dev/null] dan tampilkan hanya http_code dengan -w.
curl -s -o /dev/null -w '%{http_code}\n' -X POST -H 'Content-Type: application/json' -d '{"title":"curl test"}' https://example.com/wp-json/wp/v2/posts4015️⃣ Mengukur waktu respons dengan perintah curl (-w)
Saat respons lambat, mudah untuk hanya melihat total, tetapi untuk tahu apakah waktu habis di koneksi atau di pemrosesan server, waktu tiap tahap perlu ditampilkan terpisah. -w menampilkan nilai hasil pengukuran dalam format yang ditentukan setelah permintaan selesai. Nilai mengisi tempat [%{nama variabel}] di dalam format.
Buang isi respons dengan [-o /dev/null] dan sembunyikan indikator progres dengan -s.
curl -o /dev/null -s -w 'code: %{http_code}\nconnect: %{time_connect}\ntls: %{time_appconnect}\nttfb: %{time_starttransfer}\ntotal: %{time_total}\n' https://example.com/code: 200
connect: 0.001507
tls: 0.017728
ttfb: 0.021912
total: 0.022825connect adalah koneksi TCP, tls adalah negosiasi TLS, ttfb adalah waktu sampai tepat sebelum byte pertama dikirim, dan total adalah waktu sampai pengiriman selesai. Keempat nilai itu adalah detik yang dihitung kumulatif sejak permintaan dimulai.
Karena server yang menjalankan curl dan situs yang menerima permintaan berada di server yang sama, koneksi hanya 0,0015 detik, negosiasi TLS selesai pada 0,0177 detik, dan byte pertama tiba pada 0,0219 detik. Dari selesainya negosiasi TLS sampai byte pertama tiba butuh sekitar 0,004 detik. Dokumentasi resmi menjelaskan bahwa tahap ini mencakup waktu server menyiapkan hasil.
Saat perintah yang sama dijalankan tiga kali lagi, total berada di antara 0,0219 dan 0,0226 detik.
🔲 Simulator perintah curl
Di simulator berikut, Anda bisa mengetik sendiri perintah-perintah sejauh ini dan melihat bagaimana output berubah untuk setiap opsi.
🔢 FAQ & Konten yang Direkomendasikan








ℹ️ Pemberitahuan Afiliasi
Konten di situs ini berisi tautan afiliasi. Jika pengunjung membeli produk atau layanan melalui tautan tersebut, situs ini menerima komisi dari penjual. Harga yang dibayar pembeli(turun saat ada diskon promo ↓), tidak naik karena hal ini. Harga, diskon, dan informasi stok yang ditampilkan berlaku pada saat penulisan dan bisa berbeda dengan kondisi sebenarnya, jadi pastikan kembali di situs penjual sebelum membeli. Pemilihan dan penilaian produk dibuat berdasarkan standar kami sendiri, dan ada tidaknya komisi tidak memengaruhi urutan maupun isi penilaian.