Belajar Wget - HTTP Request, Headers & Cookies
Episode 7 of 23

Belajar Wget - HTTP Request, Headers & Cookies

Membentuk request HTTP sesuai keinginan: header kustom, User-Agent yang bisa diganti, pengiriman data POST, serta mengelola cookie dan Basic Auth untuk mengakses konten yang membutuhkan login.

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

Pendahuluan

Di episode 6 kalian bertransaksi dengan server FTP. Sekarang kita kembali ke HTTP — protokol yang membentuk sebagian besar traffic web — dan melihat sisi "wajah" sebuah request. Secara default, wget mengirim request yang polos: User-Agent Wget/1.21, tanpa cookie, tanpa header khusus. Itu cukup untuk halaman publik, tapi banyak server berperilaku berbeda terhadap request yang "terlihat" seperti bot.

Kemampuan membentuk request adalah kunci untuk tiga skenario umum: mengakses konten yang hanya terbuka untuk browser tertentu, mengirim data ke server (form login, API sederhana), dan mempertahankan sesi login saat mirroring situs yang diproteksi. Episode ini membekali kalian dengan alat untuk ketiganya.

Header Kustom dengan --header

Setiap request HTTP terdiri dari baris method, target URL, dan sekumpulan header. Wget mengirim header bawaan yang minimal — dan jika kalian butuh lebih, opsi --header menjadi pintu masuknya.

Kirim beberapa header kustom sekaligus
wget --header="Accept-Language: id,en" \
     --header="X-Client: devvnull-bot" \
     https://api.example.com/data.json

Opsi --header bisa diulang berkali-kali; setiap baris menambahkan satu header ke semua request dalam sesi tersebut. Header kustom dipakai untuk segudang kebutuhan: memilih bahasa konten, memberi label identitas aplikasi, mengirim token Authorization untuk API, sampai mengatur Content-Type pada request POST. Perhatikan formatnya: nama dan nilai dipisahkan titik dua, persis seperti header HTTP aslinya.

Tip

--header juga bisa menimpa header bawaan yang dikirim wget. Misalnya wget --header="Accept-Encoding: identity" mengganti nilai default Accept-Encoding dengan yang lebih sederhana — berguna saat wget justru bermasalah dengan konten terkompresi dari server tertentu.

Mengganti User-Agent

User-Agent adalah header yang mengidentifikasi software yang mengirim request. Secara default wget mengirim Wget/1.21, jujur tapi tidak selalu disukai: sebagian server menyajikan versi halaman berbeda untuk browser dan bot, dan sebagian lain menolak agent yang tidak dikenal. Opsi --user-agent memungkinkan kalian mengubahnya:

Meniru browser saat mengambil halaman
wget --user-agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" \
     https://example.com/halaman-browser-saja

Ada dua sikap yang perlu kalian pegang. Pertama, mengganti User-Agent adalah praktik yang sah untuk mengakses konten yang memang ditujukan ke browser, dan banyak dokumentasi resmi menganjurkan menyebut kontak kalian dalam agent agar admin server bisa menghubungi pemilik bot. Kedua, jangan pernah memakai agent palsu untuk melewati pembatasan akses yang seharusnya kalian hormati — itu melanggar etika dan berpotensi melanggar ketentuan layanan situs tersebut.

Mengirim Data POST: --post-data dan --post-file

Wget memang born sebagai downloader, tapi ia juga mampu mengirim data ke server. Opsi --post-data mengirim string sebagai body request POST, sedangkan --post-file mengambil body dari isi sebuah file:

POST dengan data langsung
wget --post-data="user=arman&role=devops" \
     https://httpbin.org/post
POST dengan isi file
wget --post-file=payload.txt https://httpbin.org/post

Kedua opsi mengubah method menjadi POST dan mengirim data apa adanya ke dalam body request. Format yang diharapkan adalah pasangan key=value yang dipisahkan & (form-url-encoded), persis seperti pengiriman form HTML. Perhatikan bahwa wget tidak mendukung multipart untuk upload file — urusan unggahan file tetap dipegang curl atau klien lain.

Important

Hanya satu dari --post-data dan --post-file yang boleh dipakai dalam satu perintah, dan wget butuh mengetahui ukuran data sebelum mengirim — karena itu argumen --post-file harus berupa file biasa, bukan pipe atau stdin. Gunakan --post-file saat body disimpan sebagai template file agar request mudah diulang dan direview.

Cookie adalah cara HTTP mengingat status di antara request — dan ini menjadi fondasi hampir semua sistem login web. Wget mengelola cookie lewat dua opsi berpasangan: --save-cookies untuk menyimpan cookie ke file, dan --load-cookies untuk memuatnya kembali pada sesi berikutnya. File hasil simpanan berformat Netscape cookies.txt, format teks yang bisa dibaca dan diedit.

Pola penggunaannya dua langkah. Pertama, login ke situs sekali — biasanya lewat request POST ke halaman auth — sambil menyimpan cookie:

Langkah 1 - login dan simpan cookie
wget --save-cookies cookies.txt \
     --post-data="user=arman&password=rahasia" \
     https://example.com/login

Kedua, gunakan cookie yang tersimpan untuk request berikutnya yang membutuhkan sesi:

Langkah 2 - pakai cookie untuk konten privat
wget --load-cookies cookies.txt \
     -p https://example.com/area-pribadi/artikel.php

Tip

Cookie tanpa masa berlaku (session cookie) tidak ikut tersimpan oleh --save-cookies secara default. Situs berbasis login sering mengandalkan session cookie, jadi tambahkan --keep-session-cookieswget --save-cookies cookies.txt --keep-session-cookies URL — agar cookie sesi ikut ditulis dan bisa dipakai di run berikutnya.

Basic Auth: --user, --password, dan --auth-no-challenge

Selain cookie, cara paling sederhana mengamankan HTTP adalah Basic Auth: kredensial dikirim sebagai header Authorization dalam bentuk terenkode. Wget mendukungnya lewat --user dan --password yang sama seperti FTP:

Basic Auth ke endpoint API
wget --user arman --password rahasia \
     https://api.example.com/private/data.json

Perilaku default wget adalah menunggu tantangan: ia mengirim request polos, dan hanya mengirim kredensial setelah server merespons dengan kode 401 yang memintanya. Opsi --auth-no-challenge mengubah perilaku ini — wget langsung menyertakan kredensial Basic di setiap request tanpa menunggu tantangan, untuk server-server langka yang tidak pernah mengirim 401.

Warning

Basic Auth mengirim kredensial hanya dengan encoding, bukan enkripsi. Di HTTP polos, --user dan --password bisa dibaca siapa saja yang menguping. Selalu gunakan HTTPS untuk endpoint ber-Basic Auth, dan jangan menaruh kredensial di command line untuk sistem produksi — simpan di ~/.wgetrc dengan izin terbatas, topik yang kita bahas di episode 8.

Memeriksa Request Kalian Sendiri

Semua opsi di atas bekerja di belakang layar — dan saat hasilnya tidak sesuai harapan, kalian perlu melihat apa yang sebenarnya dikirim. Situs seperti httpbin.org menyediakan endpoint yang mengembalikan echo dari request: header, body, dan method yang kalian kirim, tanpa perlu server sendiri.

Lihat header dan data yang sebenarnya dikirim
wget -qO- --post-data="user=arman" \
     --header="X-Custom: tes" \
     https://httpbin.org/post

Respons berisi objek JSON dengan field headers yang menampilkan semua header request kalian (termasuk header kustom) dan field form yang menampilkan data POST. Ini cara tercepat untuk memvalidasi bahwa --header tertulis dengan benar, --user-agent benar-benar terganti, dan data POST sampai dalam bentuk yang diharapkan — sebelum kalian membidik server produksi yang tidak memaafkan kesalahan.

Tip

Gunakan -qO- — gabungan --quiet dan output ke stdout — untuk menampilkan body respons langsung ke terminal tanpa file perantara. Salurkan ke jq jika ingin membaca JSON-nya dengan rapi, pola debugging yang sama seperti curl ... | jq yang biasa kalian pakai.

Penutup

Episode 7 membekali kalian dengan kontrol penuh atas bentuk request HTTP: header kustom berulang dengan --header, identitas yang bisa diganti lewat --user-agent, pengiriman data POST dengan --post-data dan --post-file, pengelolaan sesi login lewat cookie jar --save-cookies dan --load-cookies, serta Basic Auth dengan --auth-no-challenge untuk server yang tidak memberikan tantangan.

Inti yang harus dibawa pulang: request yang sama, wajah yang berbeda, hasil yang berbeda. Server memutuskan perilaku berdasarkan apa yang kalian kirim — dan wget memberi kalian kendali atas itu. Gunakan dengan etika: jangan meniru agent untuk menembus pembatasan, dan selalu lindungi kredensial.

Di episode 8 berikutnya kita akan merapikan semua flag ini: menyimpan kebijakan default seperti User-Agent, proxy, dan jumlah retry di file konfigurasi wgetrc, lengkap dengan prioritasnya terhadap command line. Sampai jumpa!