Belajar Curl - POST, PUT, DELETE & Form Data
Episode 5 of 23

Belajar Curl - POST, PUT, DELETE & Form Data

Berpindah dari membaca menjadi menulis: mengirim data dengan POST, mengatur method PUT, PATCH, dan DELETE, meng-encode otomatis nilai form, serta mengunggah file melalui multipart form data.

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

Pendahuluan

Hingga episode 4, kalian terutama membaca: mengambil halaman, melihat header, mengikuti redirect. Sekarang saatnya sisi yang lebih menarik — menulis: mengirim data ke server dengan POST, mengganti resource dengan PUT, menghapus dengan DELETE, dan mengunggah file. Inilah gerbang menuju pengujian API sungguhan.

Mengapa episode ini penting? Karena di dunia nyata, jarang sekali kalian hanya melakukan GET. Membuat pengguna baru, mengirim pesan, mengunggah laporan, menghapus data — semuanya adalah request yang membawa payload. Kalian tidak bisa mengandalkan browser Developer Tools selamanya; dengan curl, setiap request bisa diulang, di-script, dan dianalisis dengan tepat.

Metode HTTP: Sekilas Peta

Dari episode 0, kita sudah mengenal method HTTP. Sekarang lihat bagaimana curl memetakannya:

MethodFungsiCurl
GETMembaca dataDefault tanpa opsi data
POSTMembuat resource baru-X POST -d "..."
PUTMengganti resource utuh-X PUT -d "..."
PATCHMengubah sebagian-X PATCH -d "..."
DELETEMenghapus resource-X DELETE

Satu fakta penting yang akan menyelamatkan kalian dari kebingungan: opsi -d sudah otomatis mengubah method menjadi POST. Artinya curl -d "a=1" URL dan curl -X POST -d "a=1" URL menghasilkan hal yang sama. Menulis -X POST secara eksplisit lebih untuk kejelasan — praktik yang banyak disukai.

POST dengan -d: Form-URL-Encoded

Bentuk paling dasar mengirim data adalah dengan -d (--data). Data dikirim sebagai application/x-www-form-urlencoded — format yang sama dengan form HTML biasa: pasangan nama=nilai dipisahkan tanda &.

POST data form sederhana
curl -X POST -d "name=Arman&role=devops" https://httpbin.org/post

Mari kita bedah: -d "name=Arman&role=devops" mendefinisikan dua pasang field. Curl mengirimnya sebagai body dengan Content-Type: application/x-www-form-urlencoded. Sebagai latihan, jalankan dan perhatikan di output: httpbin.org/post akan mengembalikan JSON berisi form dengan field name dan role — bukti bahwa data sampai dengan benar.

Tip

Ketik -d "name=Arman&role=devops" persis seperti contoh, lalu perhatikan bahwa spasi dan karakter khusus di dalam nilai harus di-encode manual. Kalau malas menghitung encode manual, jangan khawatir — solusinya ada di bagian berikutnya.

--data-urlencode: Biar Curl yang Meng-encode

Masalahnya muncul saat nilai mengandung spasi, tanda &, atau karakter khusus — misalnya nama "Arman Dwi Pangestu". Jika ditulis mentah di -d, data akan salah diurai oleh server.

Solusinya: opsi --data-urlencode yang otomatis meng-encode nilai sesuai aturan URL:

Nilai di-encode otomatis oleh curl
curl -X POST \
     --data-urlencode "name=Arman Dwi Pangestu" \
     --data-urlencode "notes=suka 100% dengan curl" \
     https://httpbin.org/post

Perhatikan: spasi akan dikirim sebagai %20, tanda % sebagai %25, dan seterusnya. Server akan menerima data yang utuh dan benar. Aturan praktisnya: selalu pakai --data-urlencode untuk nilai yang berasal dari input manusia — nama, pesan, parameter query — dan -d untuk data yang memang sudah aman.

PUT, PATCH, DELETE: Mengubah dan Menghapus Resource

Setelah POST, tiga method lain melengkapi operasi CRUD. Polanya sama — tentukan method dengan -X, kirim data dengan -d jika diperlukan:

PUT - ganti resource secara utuh
curl -X PUT -d "title=Episod Kelima&content=lorem" https://httpbin.org/put
DELETE - hapus resource
curl -X DELETE https://httpbin.org/delete
PATCH - ubah sebagian resource
curl -X PATCH -d "title=Judul Diperbarui" https://httpbin.org/patch

Semantiknya: PUT mengganti resource utuh, PATCH hanya bagian yang dikirim, DELETE menghapus. Banyak API mengikuti semantik ini dengan ketat, jadi biasakan memilih method yang tepat sejak awal — bukan sekadar -X POST untuk segala hal.

Upload File & Multipart: -F

Ketika data yang dikirim berupa file — atau kombinasi field dan file, seperti formulir pendaftaran dengan foto — format application/x-www-form-urlencoded tidak lagi memadai. Di sinilah multipart form data (multipart/form-data) masuk: format yang sama dengan yang digunakan browser saat <form> mengunggah file.

Opsi curl untuk ini adalah -F (--form). Formatnya mirip -d, dengan satu perbedaan besar: nilai dengan awalan @ berarti isi dari sebuah file.

Multipart: field + file
curl -X POST \
     -F "name=Arman" \
     -F "avatar=@/tmp/foto.jpg" \
     https://httpbin.org/post

Di contoh di atas, -F "name=Arman" mengirim field teks biasa, sedangkan -F "avatar=@/tmp/foto.jpg" mengirim isi file /tmp/foto.jpg sebagai file bernama foto.jpg. Server akan menerima keduanya dalam satu body multipart — lihat di output httpbin.org/post: bagian form berisi name, dan bagian files berisi avatar.

Important

Arah @ menentukan perilaku: -F "file=@path" mengirim isi file dari path, sedangkan -F "file=path" mengirim string path apa adanya sebagai nilai field. Awalan @ ini juga dipakai -d dan -T — ia adalah simbol "baca dari file" di dunia curl. Untuk mengubah nama file yang dikirim, gunakan ;filename= seperti -F "avatar=@/tmp/foto.jpg;filename=profil.jpg".

-d vs -F: Kapan Pakai yang Mana?

KebutuhanPakaiContent-Type
Field teks sederhana-dapplication/x-www-form-urlencoded
Nilai yang butuh encode otomatis--data-urlencodeSama dengan -d
Upload file / campuran field + file-Fmultipart/form-data

Analoginya: -d itu seperti mengisi formulir dengan pulpen — cepat untuk data pendek. -F itu seperti mengirim paket dengan lampiran — dibutuhkan saat ada file. Keduanya sah, tinggal sesuaikan dengan kebutuhan server.

Kesalahan Umum (Common Pitfalls)

  1. Menggabungkan -d dan -F dalam satu request. Keduanya mengatur Content-Type secara berbeda dan saling bertabrakan. Pilih salah satu — jangan campur.

  2. Lupa @ saat ingin mengunggah file. -F "file=path" mengirim teks path, bukan isi file. Awalan @ adalah pembeda utamanya.

  3. Menulis -X DELETE tanpa memahami server. Sebagian framework dan server lama mengharuskan method POST dengan field _method=delete. Selalu baca dokumentasi API yang kalian targetkan.

  4. Berharap -d otomatis mengirim JSON. -d mengirim form-url-encoded. Untuk JSON, kalian perlu mengatur header Content-Type: application/json — topik yang akan kita bahas di episode 6.

Note

Bila kalian ingin mengirim data dari file sebagai body, curl juga mendukung -d @file — awalan @ berarti "baca dari file ini". Ini sangat berguna saat body request disimpan sebagai file template, misalnya -d @payload.json. Pola ini akan kembali muncul di episode JSON & REST API testing.

Penutup

Pada episode 5 ini kalian telah berpindah dari sekadar membaca menjadi menulis: mengirim data form dengan -d, memastikan nilai aman dengan --data-urlencode, memilih method PUT/PATCH/DELETE dengan -X, serta mengunggah file dengan multipart -F.

Inti yang harus dibawa pulang:

  • -d otomatis menjadikan request sebagai POST; -X memilih method secara eksplisit.
  • --data-urlencode menangani encode nilai — wajib untuk input manusia.
  • PUT mengganti utuh, PATCH mengubah sebagian, DELETE menghapus.
  • -F = multipart untuk upload file; @ berarti "isi dari file".
  • Jangan mencampur -d dan -F dalam satu request.

Di episode 6 selanjutnya kita akan menggabungkan semuanya untuk JSON & REST API testing — mengirim body JSON dengan header Content-Type: application/json, membaca respons JSON dengan jq, serta membangun alur CRUD lengkap terhadap sebuah API. Sampai jumpa di episode 6!

Belajar Curl - POST, PUT, DELETE & Form Data | Belajar Curl