Perintah curl: cara memakai opsi, permintaan POST, dan unduh file

Lingkungan ujiKeluarga RHELAlmaLinux 9.8akun rootDiperiksa 2026-10-28

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.txt
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php

Mudah 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=86400

Di diagram berikut Anda bisa membandingkan langkah demi langkah berapa kali permintaan dikirim dan apa yang muncul di layar untuk setiap opsi.

🧭 Permintaan dan output per opsi curl: 301 dari alamat http
Diagram penjelasan
⚙️ Opsi
$ curl -I -L -IL http://example.com/
① GETHEAD Permintaanhttp://example.com/
➜
301 Moved PermanentlyLocation: https://example.com/
② GETHEAD Permintaanhttps://example.com/Tidak diminta
➜
200Tidak ada respons
🖥️ Yang ditampilkan di layar
Isi respons 301 (7 baris HTML)
Header respons 301, 7 baris
Isi respons 200 (HTML halaman beranda, 96.679 byte)
Header 301, 7 baris → header 200, 10 baris
Tanpa opsi, curl tidak mengirim permintaan lagi ke alamat https di [Location] dan hanya menampilkan isi respons 301.
-I hanya menerima header lewat permintaan HEAD dan, tanpa meminta alamat baru, menampilkan status 301 dan header [Location].
-L mengirim satu permintaan lagi ke alamat https di [Location] dan menampilkan isi respons 200 terakhir.
-IL menampilkan header dari kedua respons secara berurutan. Setelah 301 menyusul 200.

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 --:--:-- --:--:-- --:--:--  190k
ls -l w-logo-blue.png
-rw-r--r-- 1 root root 3113 Oct 28 14:29 w-logo-blue.png

Setelah 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 --:--:-- --:--:-- --:--:-- 4291k
ls -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/application

4️⃣ 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/posts
401

5️⃣ 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.022825

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

Simulator perintah curlcurl 7.76.1
[root@server work]#
Gunakan tombol ↑↓ pada keyboard untuk memanggil kembali perintah yang diketik sebelumnya.

🔢 FAQ & Konten yang Direkomendasikan

-s menyembunyikan indikator progres sekaligus pesan galat. Saat kami meminta alamat yang tidak ada, tidak ada yang ditampilkan dan hanya tersisa kode keluar 6. Jika Anda memakai -sS, indikator progres tetap tersembunyi, tetapi galat seperti [curl: (6) Could not resolve host] tetap muncul.

-k melewati langkah yang memeriksa apakah koneksi aman, sehingga curl mengirim data tanpa memeriksa apakah server yang dihubungi benar-benar milik domain itu. curl memeriksa apakah sertifikat server memuat nama domain yang Anda hubungi dan apakah sertifikat itu bisa diverifikasi dengan penyimpanan sertifikat. Jika galat ini muncul, periksa dulu nama domain dan penerbit sertifikatnya.

Menurut dokumentasi resmi, saat menerima respons 301, 302, atau 303, curl mengubah permintaan berikutnya menjadi GET. Untuk mempertahankan POST, gunakan opsi khusus seperti [--post301]. Metode yang ditentukan dengan -X lebih diutamakan daripada perubahan ini.

🧭 Konten perintah jaringan yang direkomendasikan 9 artikel · 2 referensi
🗂️ Perintah jaringan
📄 Perintah SSH 📄 Perintah rsync 📄 Perintah wget 📄 Perintah rz · sz 📄 Perintah curl
📄 Perintah host 📄 Perintah nslookup
📄 Perintah ip 📄 Perintah netstat · ifconfig

ℹ️ 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.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Buktikan bahwa Anda manusia: 2   +   8   =