Rabu, 01 September 2010

Wget, The best downloader

Wget merupakan salah satu tool download command line yang paling terkenal, agar Anda bisa mendownload apa saja yang Anda suka, hanya yang Anda suka, dan kapan saja Anda suka. Berhati-hatilah jika menggunakan wget di tempat dengan koneksi Internet yang cepat, sebab kesalahan memakai opsi wget bisa berakibat Anda mendownload banyak halaman tanpa henti hingga beratus-ratus mega atau bergiga-giga. Juga sebaiknya tidak melakukan download masal secara berlebihan pada satu situs, sebab mungkin situs tersebut jadi overload dan terganggu aktivitasnya.


Tentu saja ada banyak tool download lain, baik berbasis grafis maupun command line. Tapi saya akan memfokuskan pada tool command line karena dua hal. Yang pertama, tool command line tersedia di server dan dapat diakses melalui telnet/SSH. Ini penting sekali agar Anda tidak harus selalu online selama download berlangsung. Juga akan meningkatkan efisiensi terutama jika mendownload ribuan file kecil-kecil, karena server umumnya memiliki latensi koneksi yang lebih rendah daripada koneksi dialup rumahan. Setelah semua file Anda download di server, Anda bisa mengemasnya dalam .zip atau .tar.gz dan baru mendownload satu file saja ke rumah. Ini mengirit waktu. Yang kedua, tool command line amat fleksibel, terutama jika dikombinasikan tool-tool command line lainnya. Akan saya demonstrasikan melalui beberapa contoh nanti.

Wget pertama kali ditulis tahun 1995 oleh Hrvoje Niksic dan dirilis di bawah lisensi GNU. Wget dikategorikan sebagai web client tool, WWW retrieval program, dan sering juga disebut web robot.

Installasi

# tar xfz wget-1.8.1.tar.gz
# cd wget-1.8.1
# ./configure --prefix=/usr
# make all install

Tambahkan opsi --with-ssl di baris configure jika Anda ingin dukungan SSL. Setelah semuanya selesai, Anda akan menjumpai wget baru di /usr/bin/wget yang siap melaksanakan kehendak dan titah Baginda

Contoh-contoh Penggunaan Wget

1. Mengambil sebuah URL dengan wget

Cukup sebutkan URL (atau URL-URL) sebagai argumen wget.

$ wget http://mwmag.com

--22:41:14-- http://mwmag.com/
`index.html'
Resolving mwmag.com... done.
Connecting to mwmag.com[202.95.131.154]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
5,219 4.98M/s
22:41:14 (4.98 MB/s) - `index.html' saved [5219]

Kita baru saja menyuruh wget untuk mengambil sebuah URL http://mwmag.com. Wget akan menyimpan ini di file index.html. Pertama-tama wget akan berusaha meresolve (mencari alamat IP) mwmag.com, melakukan koneksi ke server tersebut, lalu mengirim request HTTP untuk meminta URI / ke host mwmag.com.

Untuk mengambil beberapa file, sebutkan saja secara berurutan. http:// bersifat opsional dan boleh tidak kita sebutkan untuk mengirit ketikan.

$ wget mwmag.com/index01.html mwmag.com/index02.html

--22:48:12-- http://mwmag.com/index01.html
`index01.html'
Resolving mwmag.com... done.
Connecting to mwmag.com[202.95.131.154]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified
6,191 5.46K/s
22:48:14 (5.46 KB/s) - `index01.html' saved [6191]
http://mwmag.com/index02.html
`index02.html'
Connecting to mwmag.com[202.95.131.154]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
6,048 5.48K/s
22:48:16 (5.48 KB/s) - `index02.html' saved [6048]
FINISHED --22:48:16--

Downloaded: 12,239 bytes in 2 files

2. Fasilitas “resume”

opsi -c (continue)

$ wget -c ftp://ftp.linux.tucows.com/pub/ISO/RedHat/enigma-i386-disc1.iso

Tanpa opsi -c, jika koneksi putus maka wget akan berhenti, meninggalkan file yang baru setengah terdownload. Saat menjalankan wget lagi, Anda dapat menambahkan -c supaya wget berusaha meresume file setengah jadi itu. Agar praktis, saya biasa selalu menambahkan -c sebagai opsi standar agar resume selalu berusaha dilakukan.

Catatan: tentu saja tidak semua URL dapat diresume. Semua bergantung pada setting webserver. Konten dinamik hasil keluaran skrip misalnya, hampir selalu tidak dapat diresume. Ini berlaku juga bagi program-program download lainnya, jadi ini bukan sebuah keterbatasan wget.

Lawan dari -c adalah -nc (no-clobber). Jika download sebuah file terhenti di tengah, dan Anda menjalankan wget lagi dengan -nc, maka wget tidak akan mengutak-atik file yang baru setengah terdownload sebelumnya, melainkan akan menganggap file itu sudah diambil dan melanjutkan ke URL berikutnya (atau langsung selesai, jika tidak ada lagi URL yang harus didownload).

3. Fasilitas “retry”

Gunakan opsi -t (tries), diikuti sebuah angka.

Dengan opsi ini Anda dapat mengatur berapa kali wget sebaiknya melakukan retry jika koneksi putus di tengah-tengah. -t 2 berarti coba hanya dua kali. Sebutkan -t 0 untuk mencoba tanpa kunjung lelah (alias, sebanyak tak hingga kali). Umumnya memang -t 0 yang dipakai, karena toh kita tidak pernah tahu berapa kali koneksi akan putus di perjalanan. Mirip dengan fitur resume, retry ini hanya bisa dilakukan jika server yang kita mintai mendukungnya. Tepatnya, retry hanya mungkin jika server mengeluarkan header Content-Length, sehingga wget dapat tahu berapa ukuran asli file yang diminta (dan jadi tahu bahwa jika yang terdownload masih lebih kecil ukurannya, berarti memang belum selesai). File-file statik secara otomatis diberi Content-Length oleh IIS, Apache, atau webserver lainnya. Tapi konten dinamik (termasuk PHP/ASP/SSI misalnya) umumnya tidak memberikan Content-Length sehingga wget tidak dapat melakukan retry. Meskipun demikian, ada trik-trik untuk bisa tetap melakukan retry, yang akan ditunjukkan nanti.

Ada opsi lain yang berhubungan dengan retry, yaitu --waitretry, yaitu berapa lama jeda (dalam detik) wget harus menunggu sebelum melakukan koneksi ulang. Defaultnya adalah 0, yaitu langsung mencoba koneksi ulang. Jika server yang kita minta melakukan banning kepada peminta yang terlalu sering melakukan koneksi, maka kita bisa menunggu dulu beberapa saat sebelum retry.

Jadi, berikut perintah untuk melakukan retry terus sampai seluruh file terdownload, tapi menunggu 1 menit di setiap kali sebelum retry. Jangan lupa memberi -c, sebab jika tidak maka wget akan mendownload dari awal setiap kali retry (Meskipun memang, jika servernya tidak mendukung resume, maka dengan -c pun wget harus mendownload dari awal).

$ wget -c -t0 --waitretry 60

ftp://ftp.linux.tucows.com/pub/ISO/RedHat/enigma-i386-disc1.iso

Catatan: meskipun diset -t0, tapi wget akan langsung menyerah jika saat ingin retry ternyata server di ujung sana mati (Connection refused) atau ternyata filenya hilang atau berubah ukuran. Jika Anda yakin file itu masih ada di lokasi yang sama dan Anda ingin wget terus mencoba meskipun server sedang mati, maka bisa dipakai trik membungkus perintah wget dalam loop skrip sederhana. Wget akan mengembalikan status program 0 (sukses) jika file telah terdownload dengan sempurna, tapi 1 jika terputus. Karena itu . Berikut skrip shell Unix untuk melakukannya:

#!/bin/sh
# download terus cd red hat 7.2 sampe aku dapet!
# gak peduli putus berapa kali, gak peduli server di sana mati.

wget -c -t0 --waitretry 60
ftp://ftp.linux.tucows.com/pub/ISO/RedHat/enigma-i386-disc1.iso
sleep 60
done

4. Cara buat download dan supaya bisa ditinggal pergi

Gunakan opsi -b (background).

$ wget -c -t0 –b

http://research.google.com/contest/prog-contest-sample.tar
Continuing in background, pid 6294.
Output will be written to `wget-log'

Karena ada -b, maka wget tidak akan menampilkan progress ke layar, melainkan semuanya akan ditulis dalam file log yang bernama wget-log. Jika di direktori yang sama kebetulan sudah ada file wget-log, maka log akan ditulis ke wget-log.1, dst. Jika Anda intip file log ini, maka isinya sebetulnya sama dengan laporan wget di mode foreground. Jadi wget menulis laporannya ke file dan bukan ke layar.

Setelah memberikan perintah wget (dan juga sebaiknya setelah Anda intip dulu sejenak wget-log untuk memastikan download sudah mulai), Anda dapat langsung log out dan mengecek lagi beberapa jam kemudian, atau keesokan harinya.

Jika Anda mendownload tanpa -b, lalu di tengah jalan karena tidak sabar menunggu Anda memutuskan ingin meninggalkan saja wget ke mode background, maka lakukan hal berikut: tekan Ctrl-Z, lalu ketik kill -HUP %1. Sinyal HUP akan memberi isyarat pada wget agar lalu mengarahkan output laporan ke wget-log dan tidak ke layar lagi. Baru setelah itu download bisa Anda tinggal.

5. Mendownload seluruh isi sebuah situs.

Gunakan opsi -r (recursive).

Di sinilah saat manfaat tool noninteraktif seperti wget membantu kita. Jika kita ingin mendownload seluruh situs lewat browser misalnya, maka Anda mungkin harus melakukan ratusan kali klik dan pemilihan menu. Membosankan sekali. Dengan tool seperti wget, maka sebuah halaman HTML yang dibaca akan diparse dan dicari link-linknya, kemudian masing-masing link ini akan ditelusuri untuk memperoleh dokumen berikutnya, dst. Dengan kombinasi -b, Anda bisa meninggalkan download dan besok-besoknya, seluruh situs sudah termirror buat Anda!

-r menyatakan pada wget bahwa kita ingin menelusuri link. Berikut contoh yang saya buat dan terletak di mwmag.com:

$ wget -r mwmag.com/issue/04/content/hack-wget/file/sample01.html

Di file sample01.html terdapat beberapa link. Wget akan memparse halaman HTML tersebut dan mengambil link-linknya. Dia tidak akan mengikuti link ke situs lain (mis: www.cnn.com) melainkan hanya ke host yang sama (mwmag.com). Halaman yang sudah diambil (mis: sample02.html yang dilink dari sample01.html) akan juga bernasib sama: diparse link-linknya dan diikuti oleh wget. Demikian seterusnya hingga seluruh link yang ada habis terjelajahi. Jika terdapat sejumlah cukup link di awal penelusuran, seluruh objek di mwmag.com yang terjamah dan publik akan bisa terjaring dan terdownload.

File-file yang didownload secara otomatis akan disimpan dalam struktur direktori mengikuti struktur URL asli. Misalnya, http://mwmag.com/issue/04/content/ akan disimpan di file index.html yang berada di subdirektori mwmag.com/issue/04/. Pengaturan ini akan memudahkan dalam mirroring (dijelaskan nanti). Catatan: Jika Anda ingin URL disimpan dalam struktur seperti ini meskipun tanpa harus melakukan download rekursif, beri opsi -x (force directories). Contoh: wget -x mwmag.com/issue/04/.

Pada umumnya Anda jarang butuh harus mendownload seluruh isi situs. Kadang hanya ingin mengambil hingga kedalaman tertentu saja, kadang hanya jenis file tertentu saja, kadang hanya ingin mengambil satu cabang situs saja (mis: /archive/2001/), atau Anda hanya ingin mengambil satu halaman beserta objek-objeknya saja (imej, JS/CSS) tanpa benar-benar bermaksud mendownload rekursif.

6. Mengambil situs satunet.com hingga tiga-empat level saja.

Gunakan -l (level).

Sebetulnya rekan kerja saya di satunet.com dulu benar-benar pernah minta ini. Dia anggota tim advertising yang ingin mendemonstrasikan portal Satunet ke calon pengiklan. Diinginkan agar situs satunet.com didownload ke laptop dan bisa dibrowse offline (“bisa diceklak-ceklik”). Tidak perlu seluruh isi situs (karena itu akan menghabiskan ruang disk ratusan MB), tapi cukup hingga tiga atau empat level saja agar jika kita mengklik sebuah halaman dari halaman depan, di halaman kedua itu kita masih bisa mengklik sesuatu, dan sekali lagi demikian.

Kita memberikan opsi -l untuk mengatur berapa level, atau kedalaman penelusuran. Jika tidak disebutkan (hanya -r), maka wget menganggap -l0, alias sampai kedalaman tak hingga (atau sampai semua link di situs ybs habis). Untuk memenuhi permintaan download empat level, kita berikan perintah ini:

$ wget -r -l4 -k http://satunet.com

Untuk apa -k (convert links)? Opsi ini penting jika kita ingin hasil download bisa dibrowse offline. -k akan mengkonversi link-link absolut (ke http://satunet.com/...) sehingga menjadi link relatif.

Tip: Anda juga bisa tambahkan -c dan -t untuk menambah reliabilitas, tapi waktu itu saya mendownload dari jaringan yang sama, jadi tidak ada masalah dengan kecepatan atau stabilitas koneksi.

Catatan: Grab rekursif memakai -r, -l0 (apalagi jika nanti Anda menggunakan -H) potensial berbahaya, karena Anda tidak pernah tahu berapa ukuran total sebuah situs. Jika di situs tersebut terdapat link yang dihasilkan secara dinamik (mis: /browseProduct.cgi?cat=foo yang lalu memuntahkan puluhan link lain), maka Anda bisa saja pada akhirnya menuai beratus-ratus halaman yang tidak diinginkan. Semakin cepat koneksi ke server, semakin berbahayalah, sebab Anda bisa membuat wget berkelana dan tersesat di rimba Web sambil mendownload segudang sampah.

7. Mengambil hanya halaman HTML dari tucows.mweb.co.id (dengan kata lain, ingin mengambil katalog HTML-nya).

Gunakan opsi -A (accept list), diikuti dengan daftar akhiran file yang diinginkan dan dipisahkan dengan koma.

$ wget -r -A htm,html -k tucows.mweb.co.id

8. Mengambil semua gambar yang ada di situs satulelaki.com.

Mungkin Anda berpikir menggunakan -A gif,jpg,jpeg. Tapi tunggu dulu: tanpa mengambil halaman HTML-nya juga, bagaimana Anda bisa menelusuri halaman demi halaman untuk menemukan gambarnya?

$ wget –c –t0 -r -A htm,html,gif,jpg,jpeg –k satulelaki.com

9. Mengambil semua file yang ada di mwmag.com, tapi tidak ingin mengambil PDF-nya.

Gunakan opsi -R (reject list). Perhatikan, ini berbeda dengan -r (huruf kecil). -R adalah lawan dari -A, yaitu untuk mengambil semua file berakhiran apa saja, kecuali yang disebutkan di daftar hitam.

$ wget -r –k -R pdf mwmag.com

10. Mengambil halaman depan www.detik.com lengkap dengan gambar, iklan, dan semuanya.

Gunakan opsi -p (page requisites).

$ wget -p www.detik.com

11. Mengambil seluruh file di www.master.web.id/tutorial/ (tapi tidak ingin mengambil file di section yang lain).

Gunakan opsi -np (no parent) sebagai pembatas -r. Dengan cara ini, -r tidak akan menelusuri ke atas path.

$ wget -r –k –np –l0 www.master.web.id/tutorial/

12. Mngambil keseluruhan file HTML dan gambar di www.master.web.id/, tapi tidak ingin mengambil bagian forum, cgi-bin, download, dan daerah-daerah dinamik lainnya yang tidak diinginkan.

Gunakan opsi -X (exclude directories), diikuti daftar direktori yang tidak ingin diikutsertakan dan dipisahkan dengan koma. Bedakan ini dengan -R. -R membatasi jenis file, -X membatasi direktori.

$ wget –r –l0 –A htm,html,gif,jpg,jpeg www.master.web.id

13. Download yang sebelumnya sudah selesai, tapi saya lupa saya ingin mengambil juga file-file PNG, ZIP, FLA, dan SWF. Tapi saya tidak ingin mendownload semuanya dari awal.

Masih ingat opsi -nc? Kali ini berguna buat kita.

$ wget -r –l0 –nc –A htm,html,gif,jpg,jpeg,png,zip,fla,swf www.master.web.id

File-file yang sudah didownload tidak akan didownload lagi, tapi tetap diparse untuk mencari link.

Gunakan opsi -X (exclude directories), diikuti daftar direktori yang tidak ingin diikutsertakan dan dipisahkan dengan koma. Bedakan ini dengan -R. -R membatasi jenis file, sementara -X membatasi direktori.

Ada lagi opsi -I (include directories) yang merupakan kebalikan -X. Silakan dicoba sendiri efeknya.

Tambahan:
Mirroring

Keinginan: Saya sudah mendownload seluruh cabang situs steven.haryan.to/email/. Sekarang saya lihat beberapa dokumen ada yang diupdate. Saya ingin pula mengupdate kopi lokal saya, tapi malas jika harus mendownload ulang semuanya.

Jawab: gunakan opsi -m (mirror). Dengan menyebutkan -m saja, Anda telah menginstruksikan wget untuk melakukan -r -N -l0 -nr. Detail tiap opsi bisa Anda baca di manual wget, yang jelas, -m ini digunakan untuk melakukan mirroring sebuah situs dan untuk mengupdatenya manakala perlu.

$ wget -m -np steven.haryan.to/email/

Pertama kali Anda menjalankan ini hingga selesai, cabang /email di homepage saya telah Anda download. Jika Anda jalankan lagi untuk kedua kalinya, wget akan mengecek dan membandingkan usia tiap file yang telah didownload dengan yang di server. Jika tidak ada yang lebih baru dari server, maka tidak ada yang didownload ulang. Enak bukan?

Sumber : http://ajie.web.id/index.php?option=com_content&task=view&id=23&Itemid=28

Bookmark and Share

4 Komentar:

Emojo mengatakan...

Thanks, tampilan blog-nya bagus. Simpel :)

Anonim mengatakan...

permisi agan nubi boleh bertanya? command wget untuk di cronjob, supaya tidak tersimpan ke file gimana ya parameternya?

Anonim mengatakan...

hasil downloadnya ditaro mana ya om ama wget?

Brengoz mengatakan...

ngerii bro...

Posting Komentar

Diberdayakan oleh Blogger.
 

Comment


ShoutMix chat widget

Cari Blog Ini

Google Search

Top Friends


GILA LINUX | Template Ireng Manis © 2010 Free Blogger Template Ajah for DheTemplate.com - New Free Blogger Template Everyday