Membedah model non-interaktif wget: alur lengkap dari parsing URL, resolusi DNS, koneksi TLS, hingga penulisan file di disk, plus peran wgetrc, robots.txt, exit code, dan cara mengendalikan log output.

Setelah di episode 1 kita memahami sejarah wget — lahir dari Geturl 1996, menjadi GNU Wget 1998, dengan dua garis keturunan 1.x dan Wget2 — sekarang saatnya membedah bagaimana wget bekerja dari dalam. Episode ini adalah jembatan antara "kenapa wget ada" dan "bagaimana memakainya", jadi perhatikan alurnya baik-baik.
Banyak pengguna wget memakainya seperti mesin fotokopi: beri alamat, tunggu hasil. Padahal di balik satu baris wget https://example.com ada rangkaian peristiwa yang teratur dan bisa diprediksi. Memahami rangkaian ini — seperti membuka kap mesin sebelum menyetir — akan membuat kalian jauh lebih percaya diri saat hasilnya tidak sesuai harapan.
Satu kata yang mendefinisikan wget: non-interaktif. Wget tidak memunculkan dialog, tidak menunggu input dari keyboard, tidak butuh tampilan grafis. Ia bekerja seperti mesin otomatis: kalian memberi URL dan opsi, wget mengerjakan semuanya sendiri, lalu keluar.
Inilah yang membuat wget sempurna untuk script, cron, dan server tanpa GUI — sesuatu yang tidak bisa dilakukan browser. Di server production, tidak ada yang duduk menunggu download selesai; yang ada adalah job terjadwal yang men-download saat tengah malam, lalu mencatat hasilnya. Wget didesain untuk dunia seperti itu sejak awal.
Setiap kali wget men-download, ia melewati enam tahap yang sama. Anggap saja seperti proses mengirim paket lewat ekspedisi:
https. Ini seperti mengecek pintu dan menyepakati amplop bersegel sebelum barang keluar.Pola enam tahap ini akan kalian lihat secara kasat mata nanti di episode 3 ketika wget menampilkan lognya — Resolving, Connecting, HTTP request sent, Saving to. Kenali tahap mana yang berhasil dan mana yang gagal, karena di situlah arah debugging kalian.
Wget menyediakan sebuah file konfigurasi global bernama wgetrc. Ada dua lokasi yang dibaca berurutan:
/etc/wgetrc (Linux/macOS), berlaku untuk semua pengguna.~/.wgetrc, berlaku khusus untuk akun kalian.File ini memuat nilai default untuk hampir semua opsi wget — seperti file settings sebuah aplikasi. Kalian bisa meletakkan preferensi yang sama untuk setiap sesi:
# ~/.wgetrc - contoh konfigurasi minimal
# Berlaku untuk semua sesi wget pengguna ini
tries = 5
timeout = 30
continue = on
quiet = off
wait = 2
robots = off
user_agent = belajar-wget/1.0
connect_timeout = 10Nilai di wgetrc adalah default: kalian tetap bisa menimpanya lewat opsi baris perintah pada setiap pemanggilan. Prinsipnya: wgetrc untuk kebiasaan yang konsisten, opsi baris perintah untuk keputusan per-download.
Tip
Jangan langsung membanjiri wgetrc kalian. Mulailah dari tries dan timeout saja, lalu tambahkan sesuai kebutuhan. Wgetrc yang terlalu agresif justru bisa membuat wget berperilaku tak terduga di situasi yang membutuhkan perilaku default — misalnya robots = off yang tidak kalian sadari aktif di semua sesi.
Sebelum men-download sebuah situs, wget juga memperhatikan robots.txt — standar etiket web yang memberi tahu crawler halaman mana yang boleh atau tidak boleh diambil. Secara default, wget menghormati robots.txt. Ini penting untuk menghindari download yang tidak sopan terhadap server orang lain.
Jika kalian benar-benar perlu melewatinya — misalnya untuk situs milik kalian sendiri — gunakan wget -e robots=off URL. Tapi ingat etikanya: mematikan robots berarti kalian bertanggung jawab penuh atas beban yang kalian berikan ke server.
Saat menulis file, wget menentukan nama file lokal dari bagian path URL. Contohnya: URL https://example.com/files/logo.png menghasilkan file lokal logo.png. Jika URL berakhir dengan / atau tidak mengandung nama file — seperti https://example.com/ — wget memakai nama default index.html.
Aturan ini bisa ditimpa dengan tiga cara:
| Situasi | Solusi |
|---|---|
| Nama default tidak diinginkan | Opsi -O FILE untuk nama khusus |
| Server mengirim nama lewat header | Opsi --content-disposition |
| Ingin mempertahankan struktur path | Opsi -x (kita bahas di episode 5) |
Pemahaman ini penting karena banyak pemula bingung melihat kenapa file yang diunduh bernama index.html padahal URL-nya berakhiran /. Jawabannya sederhana: wget tidak punya nama lain untuk dijadikan acuan.
Setiap kali wget selesai, ia "berbicara" melalui exit code — angka yang dikembalikan ke shell. Ini adalah sistem sinyal utama wget untuk scripting, dan aturannya sangat sederhana: 0 berarti sukses, selain 0 berarti ada masalah.
wget -q https://example.com
echo $?wget -q https://domain-yang-tidak-ada-xyz.example
echo $?Pada contoh kedua, kalian akan melihat exit code 4 — artinya wget mengalami kegagalan jaringan. Setiap angka punya makna spesifik yang didokumentasikan di man wget pada bagian EXIT STATUS:
| Exit Code | Arti |
|---|---|
| 0 | Sukses, tidak ada masalah |
| 1 | Error generik |
| 2 | Parse error (contoh: opsi atau file konfigurasi salah) |
| 3 | Error I/O file |
| 4 | Gagal jaringan |
| 5 | Gagal verifikasi SSL |
| 6 | Gagal autentikasi username/password |
| 7 | Error protokol |
| 8 | Server mengirim respons error |
Important
Exit code adalah bahasa utama wget untuk script. Ketika kalian menulis if wget ...; then atau wget ... || exit 1, kalian sedang membaca bahasa ini. Nanti di episode scripting, kebiasaan memeriksa exit code akan membedakan script yang andal dari script yang "biasa saja".
Secara default wget menampilkan log berisi progress download di terminal. Untuk mengendalikan kebisingan ini, wget menyediakan beberapa opsi:
| Opsi | Fungsi |
|---|---|
-q | Membungkam semua output kecuali error fatal |
-nv | Mematikan output verbose, tetap menampilkan info penting |
-a FILE | Menambahkan (append) log ke FILE |
-o FILE | Menulis log ke FILE |
-d | Mode debug: detail paling lengkap untuk troubleshooting |
-S | Menampilkan header respons yang dikirim server |
Ada satu detail menarik tentang progress bar: ketika wget berjalan di terminal, ia menampilkan progress bar lengkap dengan persentase; tetapi ketika output dialihkan ke file atau bukan terminal, wget beralih ke tampilan titik-titik. Jangan kaget melihat barisan titik di output script — itu normal, bukan error.
Pada episode 2 ini, kalian telah membedah arsitektur wget dari dalam: model non-interaktif yang menjadi jiwanya, enam tahap transfer (parse URL, resolve DNS, connect TLS, send request, receive response, write file), peran wgetrc, aturan robots.txt dan penentuan nama file, bahasa exit code, serta cara mengendalikan log dan output.
Inti yang harus dibawa pulang:
-q, -nv, -a, -o, -d, -S adalah tombol kendali log kalian.Di episode 3 selanjutnya, kita mulai hands-on sungguhan: download file dasar — menjalankan download pertama ke https://example.com, memahami penentuan nama file dan opsi -O, mengalirkan output ke stdout dengan -O -, serta menguasai progress bar dan log output. Sampai jumpa di episode 3!