Mengunduh berkas lewat browser terasa sederhana: klik tautan, tunggu bilah kemajuan penuh, selesai. Kesederhanaan itu menyimpan satu syarat yang jarang disadari, yaitu Anda harus menungguinya. Browser membutuhkan tampilan grafis, membutuhkan seseorang yang menekan tombol, dan ketika koneksi terputus di menit kesepuluh, sebagian besar unduhan dimulai kembali dari nol.
Syarat itu menjadi masalah begitu pekerjaannya pindah ke server. Sebuah VPS yang Anda akses dari jauh tidak punya layar untuk diklik, dan berkas berukuran belasan gigabyte tidak pantas menunggu Anda tetap terjaga. Wget adalah jawaban untuk situasi semacam itu.
Wget Adalah Pengunduh Berkas dari Baris Perintah
Wget adalah program untuk mengunduh berkas dari internet melalui terminal, tanpa antarmuka grafis sama sekali. Namanya merupakan gabungan dari web dan get — mengambil sesuatu dari web. Program ini merupakan bagian dari proyek GNU dan berlisensi GPL, sehingga bebas dipakai siapa pun tanpa biaya.
Protokol yang dipahaminya ada empat: HTTP, HTTPS, FTP, dan FTPS. Daftar itu memang jauh lebih pendek dibanding sebagian alat sejenis, tetapi keempatnya menutup hampir semua kebutuhan mengunduh berkas sehari-hari. Versi stabil terakhir dari cabang utamanya adalah 1.25.0 yang dirilis pada 10 November 2024.
Bentuk perintahnya sesederhana menyebutkan alamat:
wget https://contoh.com/berkas/laporan.pdfDua perilaku bawaannya sering mengejutkan pemakai baru. Pertama, kalau alamatnya tidak menyebut nama berkas, hasilnya disimpan sebagai index.html. Kedua, wget memaafkan alamat yang ditulis tanpa protokol — mengetik wget contoh.com tetap berjalan karena wget menambahkan http:// sendiri di depannya.
Kenapa Wget Dirancang untuk Ditinggal Jalan Sendiri
Sifat inilah yang membedakan wget dari sekadar tombol unduh. Wget bersifat non-interaktif, artinya ia tidak pernah menunggu jawaban Anda di tengah jalan. Karena itu ia bisa dijalankan dari dalam skrip, dari cron job, atau ditinggalkan berjalan di server yang Anda akses lewat SSH.
Tiga kemampuan bawaannya bekerja bersama untuk membuat itu mungkin.
Mengulang sendiri saat koneksi bermasalah. Secara bawaan wget mencoba ulang sampai 20 kali sebelum menyerah. Pengecualiannya masuk akal: kesalahan yang sudah pasti tidak akan berubah, seperti berkas tidak ditemukan atau koneksi ditolak, tidak diulang sama sekali.
Melanjutkan unduhan yang putus. Opsi -c meminta wget meneruskan berkas yang belum utuh, bukan mengunduhnya dari awal. Pada pengujian kami, sebuah berkas 10 MB sengaja diputus di angka 1.556.226 byte. Perintah yang sama diulang dengan -c membuat server membalas kode 206 Partial Content. Berkas selesai di 10.485.760 byte tanpa satu pun byte diunduh dua kali.
Unduhan putus di 1,5 MB, dijalankan ulang dengan -c, server membalas 206 Partial Content, berkas selesai di 10 MB.
Syaratnya ada di sisi server. Kalau server tidak mendukung permintaan sebagian dan membalas
200alih-alih206, wget terpaksa mengunduh berkas itu dari awal.
Berjalan di latar belakang. Opsi -b melepas wget dari sesi terminal Anda. Ia membalas dengan Continuing in background, pid 94775. lalu memindahkan seluruh catatannya ke berkas wget-log. Sesi SSH boleh ditutup, unduhan berjalan terus.
Memasang Wget di Linux, macOS, dan Windows
Sebagian besar distribusi Linux server sudah menyertakan wget. Kalau belum, satu perintah cukup:
sudo apt install wget # Debian, Ubuntu
sudo dnf install wget # Fedora, Rocky, AlmaLinuxMac justru tidak menyertakannya. Pada mesin uji kami, curl sudah tersedia di /usr/bin/curl sementara wget sama sekali tidak ditemukan di macOS. Homebrew menyelesaikannya:
brew install wgetWindows juga tidak membawa wget, meskipun sejak Windows 10 versi 1803 sistem ini sudah menyertakan curl.exe. Ada dua cara memasangnya. Lewat Windows Package Manager:
winget install -e --id JernejSimoncic.WgetAtau mengunduh wget.exe dari situs Jernej Šimončič, lalu menaruhnya di folder yang terdaftar di PATH. Berkas itu dikompilasi statis, sehingga satu berkas tunggal sudah cukup tanpa pustaka pendamping.
Ada satu hal yang perlu diperhatikan pengguna Windows. Build resmi untuk Windows masih berhenti di versi 1.21.4, baik yang diunduh langsung maupun yang dipasang lewat winget. Padahal GNU sudah merilis 1.25.0. Wget di Windows tertinggal tiga rilis minor dari saudaranya di Linux dan macOS.
Pengguna Android bisa menjalankan wget di dalam Termux dengan pkg install wget.
Kenapa Perintah Wget Anda Ditolak di Windows
Pesan wget: command not found atau wget is not recognized termasuk keluhan yang paling sering muncul. Di Windows, penyebabnya bisa tiga hal yang sama sekali berbeda.
| Sebab | Cirinya | Jalan keluar |
|---|---|---|
| Belum dipasang | Ditolak di semua shell | Pasang lewat winget |
| Alias PowerShell | Jalan, tetapi opsinya ditolak | Panggil wget.exe |
| Salah kata: winget | Muncul daftar aplikasi | Periksa ejaannya |
Kemungkinan pertama adalah yang paling lugas: wget memang belum terpasang, dan bagian sebelumnya sudah menjelaskan cara memasangnya.
Kemungkinan kedua lebih licin. Windows PowerShell 5.1 masih menjadi bawaan Windows 10 dan 11. Di sana kata wget sudah dipakai sebagai alias (nama panggilan) untuk perintah Invoke-WebRequest milik PowerShell sendiri. Akibatnya perintah Anda seolah dikenali, padahal yang berjalan adalah program lain dengan opsi yang sama sekali tidak kompatibel.
Lebih membingungkan lagi, Invoke-WebRequest tidak menyimpan hasilnya sebagai berkas kecuali diminta. Unduhan pun terasa berhasil tanpa meninggalkan berkas apa pun. Alias ini dihapus mulai PowerShell 6, jadi perintah yang sama justru berbalik ditolak begitu Anda pindah ke PowerShell versi baru. Jalankan di Command Prompt atau panggil wget.exe secara eksplisit untuk memastikan wget asli yang bekerja.
Kemungkinan ketiga adalah salah kata. winget dengan huruf "i" adalah Windows Package Manager buatan Microsoft, alat untuk memasang dan memperbarui aplikasi di Windows. Namanya mirip, tetapi pekerjaannya berbeda: winget memasang program, wget mengunduh berkas. Keduanya bahkan bisa dipakai bersamaan, seperti pada perintah instalasi di bagian sebelumnya.
Penggunaan Dasar Wget dan Opsi yang Sering Dipakai
Opsi wget berjumlah ratusan, tetapi yang benar-benar dipakai sehari-hari bisa dihitung dengan jari.
| Opsi | Fungsi |
|---|---|
-O nama | Simpan dengan nama yang Anda tentukan |
-P folder | Simpan ke folder tujuan tertentu |
-i berkas | Baca daftar alamat dari berkas teks |
-c | Lanjutkan unduhan yang terputus |
-b | Jalankan di latar belakang ke wget-log |
-q | Diam total, tanpa keluaran di layar |
--limit-rate=300k | Batasi kecepatan unduh |
-nc | Jangan sentuh berkas yang sudah ada |
Tiga di antaranya paling sering menyelesaikan pekerjaan nyata. Untuk menyimpan berkas dengan nama yang Anda kehendaki ke folder tertentu:
wget -P /var/www/berkas -O wordpress.zip https://wordpress.org/latest.zipUntuk mengunduh banyak berkas sekaligus, kumpulkan alamatnya di sebuah berkas teks — satu alamat per baris — lalu serahkan ke wget:
wget -i daftar-unduhan.txtPerlu diperhatikan saat memakai cara ini: kalau dua alamat menghasilkan nama berkas yang sama, wget tidak menimpanya. Berkas kedua disimpan sebagai index.html.1, yang ketiga index.html.2, dan seterusnya. Kalau perilaku yang Anda inginkan justru melewati berkas yang sudah ada, pakai -nc; wget akan menjawab File 'ada.html' already there; not retrieving. lalu berhenti.
Untuk mengunduh berkas besar di jam sibuk tanpa membuat pengguna lain kehabisan bandwidth, batasi kecepatannya:
wget --limit-rate=300k -b https://contoh.com/rilis/paket-besar.tar.gzKalau shell Anda zsh — bawaan macOS sejak Catalina dan pilihan banyak pengguna Linux — bungkus alamat yang mengandung
?,&, atau[ ]dengan tanda kutip. Tanpa kutip, zsh mencoba memperlakukannya sebagai pola nama berkas lalu berhenti denganzsh: no matches found, dan wget bahkan tidak sempat dijalankan. Bash tidak bermasalah dengan alamat yang sama.
Menyalin Satu Situs Utuh dengan Mode Rekursif
Kemampuan inilah yang membuat wget sulit digantikan. Dengan -r, wget tidak berhenti pada satu berkas — ia membaca tautan di dalam halaman yang diunduh, lalu mengikuti tautan itu satu per satu. Kedalaman bawaannya lima tingkat.
Untuk menyalin sebuah situs supaya bisa dibaca tanpa koneksi, empat opsi bekerja bersama:
wget -m -k -p -np https://contoh.com/panduan/Masing-masing punya tugas. -m adalah mode mirror, yang menurut manualnya setara dengan -r -N -l inf --no-remove-listing — rekursif, memeriksa tanggal berkas, dan tanpa batas kedalaman. -p ikut mengambil gambar dan berkas gaya yang dibutuhkan halaman agar tampil utuh. -k mengubah tautan di dalam berkas hasil unduhan supaya menunjuk ke berkas lokal, bukan kembali ke internet. Dan -np menahan wget agar tidak naik ke direktori induk.
Tautan yang menuju ke dalam /panduan/ diikuti dan diunduh wget, sedangkan tautan yang menuju ke luarnya dilewati oleh -np.
Opsi -np mudah dilupakan, dan akibatnya terasa cepat. Tanpa opsi itu, permintaan menyalin satu folder panduan bisa berubah menjadi upaya menyalin seluruh situs.
Dua hal perlu Anda pertimbangkan sebelum menjalankannya. Mode rekursif membebani server tujuan dengan ratusan permintaan beruntun, jadi sisipkan jeda dengan --wait=1 kalau situsnya bukan milik Anda sendiri. Selain itu, situs yang isinya dirakit oleh JavaScript di sisi browser tidak akan tersalin utuh. Wget menyimpan berkas apa adanya tanpa menjalankan kode apa pun di dalamnya. Untuk menyinkronkan berkas antar-server, rsync merupakan pilihan yang jauh lebih tepat.
Mengunduh dari Balik Proxy dan Halaman Berpassword
Di jaringan kantor dan kampus, koneksi keluar biasanya harus melewati proxy. Wget menanganinya tanpa opsi tambahan: ia membaca variabel lingkungan http_proxy, https_proxy, dan no_proxy secara otomatis.
export http_proxy=http://proxy.kantor.id:8080
export https_proxy=$http_proxy
wget https://contoh.com/berkas.zipKalau satu alamat perlu dikecualikan dari proxy, tambahkan --no-proxy pada perintah tersebut. Sebaliknya, saat wget mendadak melaporkan Connection refused ke alamat yang tidak Anda kenali, curigai variabel lingkungan yang masih tertinggal dari sesi sebelumnya.
Untuk halaman yang meminta nama pengguna dan kata sandi, wget menyediakan --user dan --password. Manual GNU memberi peringatan tegas soal keduanya: kata sandi yang ditulis di baris perintah terbaca oleh siapa pun yang menjalankan ps di mesin yang sama. Manual menyarankan dua pengganti, yaitu --use-askpass yang meminta kata sandi secara terpisah, atau menyimpannya di berkas .netrc yang izin aksesnya dikunci dengan chmod 600.
Untuk layanan yang memakai token, kirimkan lewat header:
wget --header="Authorization: Bearer TOKEN_ANDA" https://api.contoh.com/berkasKetika Berkas Hasil Unduhan Justru Berisi Halaman Web
Ada kegagalan yang lebih licin daripada pesan error, yaitu unduhan yang dilaporkan berhasil padahal isinya keliru. Wget menyimpan apa yang dikirim server, bukan apa yang Anda lihat di browser.
Contoh yang paling sering ditemui ada di GitHub. Alamat yang Anda salin dari bilah alamat browser adalah alamat halaman, bukan alamat berkas:
wget https://github.com/torvalds/linux/blob/master/READMEPerintah itu selesai dengan kode 0 dan berkasnya benar-benar tersimpan. Pada pengujian kami ukurannya 290.235 byte — seluruh halaman GitHub lengkap dengan menu dan tombolnya. Berkas README yang sebenarnya hanya 6.034 byte, dan baru ikut terunduh kalau alamat mentahnya yang dipakai:
wget https://raw.githubusercontent.com/torvalds/linux/master/README
Alamat halaman GitHub menghasilkan halaman HTML 290.235 byte, alamat raw menghasilkan berkas asli 6.034 byte.
Pola yang sama muncul pada tautan berbagi Google Drive. Untuk berkas berukuran besar, Drive tidak langsung mengirim berkasnya melainkan halaman konfirmasi pemindaian virus, dan halaman itulah yang tersimpan. Layanan berbagi berkas lain yang memasang halaman antara berperilaku serupa.
Memastikannya cukup satu perintah:
file paket.zipBalasan HTML document text berarti yang Anda pegang adalah halaman web, bukan berkas yang dituju. Perhatikan juga penamaannya: secara bawaan wget menyusun nama berkas dari alamatnya dan mengabaikan nama yang disarankan server lewat header Content-Disposition. Tambahkan opsi --content-disposition kalau Anda ingin nama berkas mengikuti saran server.
Membaca Kegagalan Wget lewat Exit Code
Ketika wget gagal, ia meninggalkan angka. Angka itulah yang membedakan tebakan dari diagnosa, dan nilainya bisa dibaca dengan echo $? setelah perintah selesai.
| Kode | Arti |
|---|---|
| 0 | Berhasil tanpa masalah |
| 1 | Kesalahan umum |
| 2 | Salah menulis opsi atau berkas konfigurasi |
| 3 | Kegagalan baca-tulis berkas |
| 4 | Kegagalan jaringan |
| 5 | Verifikasi sertifikat gagal |
| 6 | Nama pengguna atau kata sandi ditolak |
| 7 | Kesalahan protokol |
| 8 | Server membalas dengan pesan kesalahan |
Tiga di antaranya menutup hampir semua kejadian nyata.
Kode 4 muncul saat nama domain tidak bisa diterjemahkan atau server tidak bisa dihubungi. Pesan unable to resolve host address menunjuk ke pengaturan DNS mesin Anda, bukan ke server tujuan.
Kode 5 berarti sertifikat SSL tidak lolos pemeriksaan. Wget menyebutkan alasannya dengan jelas, misalnya Issued certificate has expired, lalu menawarkan --no-check-certificate sebagai jalan pintas. Opsi itu memang membuat perintah berhasil, tetapi perlu Anda pahami bahwa ia tidak memperbaiki apa pun — ia mematikan pemeriksaannya. Anda kehilangan kepastian bahwa yang menjawab di ujung sana benar-benar server yang dimaksud. Pakai hanya untuk server internal yang sertifikatnya Anda terbitkan sendiri.
Kode 8 berarti servernya menjawab, tetapi jawabannya berupa penolakan. Angka 404 menandakan alamatnya salah. Sedangkan 403 di sebagian besar kasus berarti server menyaring pengunjung berdasarkan identitas program, dan --user-agent bisa melewatinya kalau memang diizinkan pemilik situs. Angka 500 dan 503 menunjuk ke masalah di sisi server, jadi mengulang perintahnya beberapa saat kemudian sering sudah cukup.
Karena angka ini konsisten, ia bisa dijadikan syarat di dalam skrip:
wget -q https://contoh.com/berkas.zip || echo "Unduhan gagal dengan kode $?"Kelemahan Wget dan Hal yang Perlu Anda Pertimbangkan
Wget bukan alat serba bisa, dan batasannya nyata.
- Hanya berbicara HTTP/1.1. Wget 1.25.0 tidak mendukung HTTP/2 sama sekali. Untuk mengunduh berkas hal ini jarang terasa, tetapi berarti wget bukan alat yang tepat untuk menguji perilaku server modern.
- Satu koneksi untuk satu berkas. Wget tidak memecah unduhan menjadi beberapa aliran paralel. Pada koneksi cepat dengan server yang jauh, ia kalah dibanding pengunduh yang memakai banyak koneksi sekaligus.
- Terbatas untuk mengirim data. Kemampuan mengunggah dan menangani metode autentikasi rumit sangat terbatas. Untuk menguji API, curl merupakan pilihan yang lebih tepat.
- Bukan pustaka. Wget hanya berupa program terminal, jadi ia tidak bisa ditanam ke dalam aplikasi Anda seperti halnya libcurl.
Sebagian batasan itu sedang dijawab oleh Wget2, penerus resmi yang versi terakhirnya 2.2.1 dirilis pada 30 Desember 2025. Wget2 membawa HTTP/2 dan unduhan paralel. Namun ia belum menggantikan wget di sebagian besar sistem, dan sebagian opsi lama berperilaku berbeda, sehingga skrip yang sudah berjalan tidak bisa dipindahkan begitu saja.
Satu hal terakhir menyangkut keamanan, dan ini lebih penting daripada seluruh daftar di atas. Anda akan sering menemui petunjuk instalasi berbentuk perintah wget yang hasilnya langsung dialirkan ke shell:
wget -O - https://situs-tertentu.com/install.sh | bashPerintah semacam itu menjalankan apa pun isi berkas tersebut dengan hak akses Anda, tanpa Anda sempat membacanya. MITRE ATT&CK mencatat wget sebagai salah satu perkakas yang dipakai penyerang untuk memasukkan payload ke mesin korban. Teknik itu tercatat dengan kode T1105 Ingress Tool Transfer, dan bentuk pipa ke shell inilah yang paling sering dipakai. Kebiasaan yang lebih aman hanya menambah satu langkah: unduh dulu, baca isinya, baru jalankan.
Pertanyaan yang Sering Muncul
Wget untuk apa? Tiga pekerjaan paling nyata: mengunduh berkas besar di server yang diakses dari jauh, menjalankan unduhan terjadwal dari dalam skrip, dan menyalin isi sebuah situs untuk dibaca tanpa koneksi.
Bagaimana cara kerja wget? Wget mengirim permintaan HTTP ke alamat yang Anda sebutkan, lalu menulis balasan server langsung menjadi berkas di disk. Bila koneksi gagal di tengah jalan, ia mengulang sendiri sampai berhasil atau sampai batas percobaan habis.
Apa perbedaan wget dan cURL? Satu kemampuan membedakan keduanya secara tegas: wget bisa mengunduh secara rekursif, menelusuri tautan sebuah halaman lalu menyalin semua yang tersambung dengannya, sementara curl tidak bisa sama sekali. Sebaliknya curl unggul untuk mengirim data dan menguji API. Perbandingan lengkapnya sudah kami bahas di artikel curl adalah.
Apakah wget itu FTP? Bukan. Wget adalah program klien yang antara lain bisa berbicara memakai FTP, di samping HTTP dan HTTPS. FTP sendiri merupakan protokol tersendiri dengan cara kerja dan port yang berbeda.
Apa bedanya wget dan winget? Keduanya program berbeda yang kebetulan namanya hanya terpaut satu huruf. Winget adalah Windows Package Manager buatan Microsoft untuk memasang aplikasi di Windows, sedangkan wget adalah pengunduh berkas lintas sistem operasi dari proyek GNU.
Kesimpulan
Wget adalah pengunduh berkas berbasis baris perintah yang kekuatannya bukan terletak pada kecepatan, melainkan pada kemampuannya menyelesaikan pekerjaan tanpa ditunggui. Percobaan ulang bawaan, kemampuan melanjutkan unduhan yang putus, dan mode latar belakang membuatnya cocok untuk unduhan besar di server, unduhan terjadwal, dan penyalinan situs secara rekursif.
Untuk pekerjaan yang berlawanan sifatnya — menguji satu alamat, mengirim data, atau menelusuri perilaku sebuah API — curl merupakan alat yang lebih tepat. Karena wget hanya berukuran beberapa megabyte dan tersedia di hampir semua sistem, mencobanya tidak menuntut persiapan apa pun selain satu perintah pemasangan.
Semoga artikel ini membantu.




