Menggunakan perintah wget
Kita semua familiar dengan browser Internet Explorer,
Opera, Mozilla, dsb. Sebagian dari kita bahkan secara eksklusif hanya
menggunakan browser untuk mengakses Web. Tapi browser bukanlah satu-satunya
alat yang bisa dipakai. Ada
berbagai program lain yang kadang lebih efisien untuk mengambil resource
tertentu. Misalnya, ada sebuah halaman yang mengandung 200 link dokumen yang
masing-masing perlu Anda ambil. Apakah Anda ingin jadi orang tolol dengan
mengklik semuanya satu persatu lalu mensave dokumen demi dokumen dengan
browser? Atau ada sebuah file besar .ISO 650MB yang ingin Anda download, di
mana kemungkinan besar akan terjadi beberapa kali putus koneksi di tengah
download dan di mana kebanyakan browser tidak menyediakan fitur resume? Atau
Anda ingin mengambil seluruh isi situs atau cabang situs tertentu? Oke, browser
tertentu, seperti Internet Explorer misalnya, saat ini sudah memiliki fasilitas
Make Available Offline yang dapat
menelusuri link hingga kedalaman tertentu, tapi bagaimana jika Anda ingin
mengambil hanya jenis file tertentu (PDF dan PS, no thanks!)? Jika ingin
mengambil hanya dari host tertentu? Jika ingin mendownload URL dengan pola
tertentu? Jika ingin berpura-pura menjadi browser lain? Fitur-fitur ini umumnya
tidak ada di browser.
Artikel ini akan membimbing Anda mempelajari penggunaan wget, 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. Dengan kata lain, supaya Anda bisa jadi raja download!
Disclaimer: Di
setiap seri artikel Hack, penulis akan mengajak pembaca bermain-main dengan
sebuah sistem dengan tujuan untuk mengenalnya lebih dalam. Kadang topik dan gaya
bahasannya akan sedikit nakal, sesuai konotasi nama serinya, namun percayalah
semua ini demi tujuan edukatif. Apa pun yang terjadi akibat penerapan dari apa
yang tertulis di sini, baik langsung maupun tak langsung, bukanlah tanggung
jawab penulis. Anda harus setuju dulu sebelum melanjutkan. Tekan Cancel dan
pilih halaman lain jika tidak setuju.
Pahamilah bahwa jika Anda menggunakan akses shell account
hosting untuk melakukan download secara berlebihan, maka Anda bisa jadi
melanggar aturan penggunaan. Umumnya account hosting Anda beli agar Anda bisa
membuat situs yang didownload orang lain,
bukan agar Anda bisa mendownload dari Web sesuka hati menggunakaan server
hosting tersebut. Juga 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.
Wget
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.
Anda pengguna Windows bisa berargumen bahwa tool
grafis—seperti Gozilla atau GetRight—juga dapat dikendalikan secara remote
melalui VNC atau PC Anywhere misalnya. Betul, tapi server hosting di Indonesia
toh rata-rata berbasis Linux. Lagipula, wget tersedia baik di Linux maupun
Windows. Learn once, use everywhere.
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. Program ini sudah jadi favorit saya sejak lama, karena
telah terinstal default di banyak tempat dan fiturnya cukup lengkap. Saat
pengembangan wget mandeg di versi 1.5.3 sejak 1998, saya sempat berpindah
mencoba-coba pavuk. Saat itu wget
belum memiliki dua fitur yang sering saya butuhkan: menangani cookie dan SSL.
Namun sejak akhir 2000 tim wget bangkit dari masa tidurnya dan mulai aktif
kembali mengeluarkan rilis baru. Hingga saat ini saya hampir selalu memakai
wget untuk mendownload, kecuali saat membutuhkan fitur-fitur khusus pavuk
tertentu—yang mana jarang saya pakai.
Versi-Versi Wget
Jika Anda memakai salah satu distro Linux, kemungkinan
wget sudah bercokol di sistem (umumnya di /usr/bin/wget).
Lihat Tabel 1 untuk mengetahui versi wget berapa yang jadi bawaan distro
popular Red Hat dan Mandrake.
Saya amat menyarankan Anda mengambil wget versi (1.8.1 pada
saat tulisan ini dibuat) terbaru supaya bisa mendapatkan fitur-fitur baru wget
dan mencoba semua contoh di artikel ini. Lihat Tabel 2 untuk mengetahui fitur
penting wget manakah yang tidak akan Anda peroleh jika masih menggunakan versi
lama. Jika Anda menggunakan Red Hat 7.2 atau Mandrake terbaru, silakan cek RPM
Find untuk mengambil RPM terbaru dari RawHide atau Mandrake Cooker. Jika Anda
masih menggunakan Red Hat 6.x atau yang lebih lama, lebih baik kompile wget
dari source. Jika Anda pengguna Windows, tinggal ke homepage wget lalu cari
binary wget yang bisa langsung Anda gunakan. Jika malas atau tidak sempat
download, semua yang Anda butuhkan ini telah disediakan di CD majalah.
Instalasi
Jika Anda memakai versi RPM, tentu saja tinggal melakukan
ini:
# rpm -Uvh wget-*.rpm
untuk mengupdate wget Anda. Jika
Anda ingin mengkompile dari source, lakukan ini:
# rpm -e wget --nodeps
# 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.
Penggunaan Dasar
Keinginan: Saya ingin mengambil sebuah URL dengan wget.
Jawab: 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.
Sambil mendownload, ia akan menampilkan animasi progress bar. Kecepatan
download tampak amat fantastis, karena wget saya jalankan di server yang sama
dengan server mwmag.com.
Seandainya ada redirect, maka wget
akan secara otomatis menelusurinya buat Anda.
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 [text/html]
[ <=> ] 6,191 5.46K/s
22:48:14 (5.46 KB/s) - `index01.html' saved [6191]
--22:48:14-- 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
Bisa dilihat, kali ini saya
mendownload dari koneksi dialup, sehingga kecepatannya hanya sekitar 5 KB/s.
Resume
Keinginan: Bagaimana agar jika file yang ingin saya ambil putus di
tengah-tengah, saat wget dijalankan lagi maka file tersebut dilanjutkan dari
titik putus, tidak didownload dari nol lagi?
Jawab: Gunakan 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).
Tanpa kehadiran -c maupun -nc,
maka kelakuan standar wget adalah sebagai berikut. Misalnya file A baru terdownload separuh. Anda memberi
lagi perintah wget untuk mengambil A.
Maka wget tidak akan mengganggu file A,
tapi akan mendownload ulang dari nol ke file A.1
(atau A.2, jika A.1 kebetulan sudah ada, dst).
Pertama-tama mungkin berbagai
kelakuan berbeda ini akan membingungkan. Tapi Anda nanti bisa memilih bagaimana
sebaiknya wget bertindak seandainya. Patokan umum: selalu gunakan -c. Jika wget protes karena server tidak
mendukung, Anda bisa hapus dulu file yang baru setengah terdownload, atau
kembali memberi perintah wget tapi tanpa -c
maupun -nc supaya file bisa
terdownload ulang di *.1. -nc umumnya hanya digunakan dalam download
rekursif (lihat subjudul “Rekursif”).
Retry
Keinginan: Bagaimana agar jika download terputus di tengah-tengah,
wget tidak langsung berhenti melainkan mencoba lagi?
Jawab: 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.
while true; do
wget -c -t0 --waitretry 60 \
ftp://ftp.linux.tucows.com/pub/ISO/RedHat/enigma-i386-disc1.iso
if test $? -eq 0; then break; fi
sleep 60
done
Di DOS/Windows pun batch file (.BAT) yang serupa bisa ditulis. Silakan
dicoba, ini jadi PR buat Anda.
Download Dan Tinggal
Keinginan: Saya mendownload file besar di server lewat telnet/SSH,
tapi meskipun wget otomatis melakukan resume dan retry, saya harus bengong
menunggu wget sampai selesai. Jika window telnet saya tutup, maka wget mati dan
download tidak dilanjutkan. Bagaimana supaya saya bisa menyuruh server
mendownload file lalu saya sendiri keluar dan offline?
Jawab: Gunakan opsi -b
(background).
$ wget -c -t0 –b \
http://research.google.com/contest/prog-contest-sample.tarContinuing 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.
Rekursif
Keinginan: saya ingin mendownload seluruh isi sebuah situs.
Jawab: 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.
Keinginan: Saya ingin mengambil situs satunet.com
hingga tiga-empat level saja.
Jawab: 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. Untuk lebih jelasnya mengenai level, silakan lihat Gambar 1.
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.
Keinginan: Saya ingin mengambil hanya halaman HTML dari tucows.mweb.co.id (dengan kata lain, ingin
mengambil katalog HTML-nya).
Jawab: 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
Keinginan: Saya ingin mengambil semua gambar yang ada di situs satulelaki.com.
Jawab: 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
Keinginan: Saya ingin mengambil semua file yang ada di mwmag.com, tapi tidak ingin mengambil PDF-nya.
Jawab: 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
Keinginan: Saya ingin mengambil halaman depan www.detik.com lengkap dengan gambar, iklan,
dan semuanya.
Jawab: Gunakan opsi -p
(page requisites).
$ wget -p www.detik.com
Keinginan: Saya ingin mengambil seluruh file di www.master.web.id/tutorial/ (tapi
tidak ingin mengambil file di section yang lain).
Jawab: 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/
Keinginan: Saya ingin mengambil 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.
Jawab: 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 \
-X /download/,/links/,/cgi-bin/,/protect/
Keinginan: 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. Capek!
Jawab: 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 \
-X /download/,/links/,/cgi-bin/,/protect/
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.
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?
Fitur Lain
Ada beberapa kemampuan dan opsi
pengatur lagi di wget. Saya sebutkan sekilas di sini untuk menghemat tempat:
wget juga dapat mengambil file-file dari server FTP (ftp://), SSL (https://). Wget dapat mengeluarkan hasil download ke file
lain atau ke stdout (opsi -O).
Wget dapat menerima daftar URL untuk didownload dari file atau dari stdin (opsi
-i). Tingkat kecerewetan wget
dapat diatur (opsi -v dan -q). wget dapat menampilkan header
response server (opsi -S,
berguna untuk debugging). Kita dapat menginstruksikan wget untuk mendownload
hingga mengisi sejumlah ruang disk tertentu saja (kuota, opsi -Q), dan juga dapat mengatur kecepatan
downloadnya (opsi --limit-rate).
Sintaks dan detail penggunaan opsi-opsi
tersebut bisa dibaca sendiri di manual wget. Sekarang kita akan segera masuk ke
babak Tantangan.
Tantangan
Setelah beberapa kali mencoba
wget, mungkin Anda akan mengalami hal berikut: dengan browser sebuah halaman
dapat dilihat dan disave dengan baik, tapi dengan wget kok tidak bisa? Entah
yang muncul Forbidden, entah halaman kosong, entah Not Found, entah halaman
peringatan, entah redirect ke URL lain, dsb.
Ada kemungkinan si pembuat atau
admin situs dengan sengaja memblok wget dan robot-robot lainnya, baik untuk
alasan yang masuk akal maupun yang tidak masuk akal. Sebagian besar cara ini
dapat ditembus dengan mudah. Mari kita lihat satu-persatu.
Tantangan 1: Halaman Berpassword (HTTP)
Ada dua macam cara utama membuat
password situs: yang pertama dengan otentikasi HTTP dan yang kedua dengan
cookie. Keduanya tidak akan saya bahas lagi, karena pernah muncul di mwmag. Cukuplah saya katakan di sini
bahwa untuk kasus yang pertama, proteksi dengan otentikasi HTTP—yang kadang
disebut juga proteksi .htaccess—biasanya
akan memunculkan kotak dialog username/password di browser grafis Anda. Sekali
username dan password diisi dengan benar, browser akan mengingat nilainya
selama sisa sesi browsing dan mengizinkan kita membrowse halaman-halaman
terproteksi tanpa harus berulang-ulang memasukkan password.
Jika Anda mencoba mengakses halaman
yang diproteksi seperti ini lewat wget, hasilnya adalah Anda mendapatkan kode
respon 401 Authorization Required,
lalu wget mengatakan Authorization Failed.
Ini karena Anda tidak menyuplai wget dengan password yang dibutuhkan. Gunakan
opsi --http-user dan --http-passwd untuk menyuplainya.
Bandingkan hasil dua perintah berikut:
$ wget http://steven.haryan.to/hack-wget/protected/
$ wget --http-user=hack --http-passwd=wget \
http://steven.haryan.to/hack-wget/protected/
Beberapa penyedia software
memproteksi area downloadnya dengan otentikasi HTTP. Biasanya mereka minta kita
melakukan registrasi dahulu, baru kemudian username dan password dikirim lewat
email. Contoh, lihat www.bitkeeper.com.
Dengan kedua opsi di atas, kita dapat tetap menggunakan wget (dan memperoleh
kemampuan resume) ketimbang harus menggunakan browser untuk mendownload file
besar.
Tantangan 2: Pengecekan Header User-Agent
Beberapa situs hanya mau
dibrowse jika kita menggunakan Internet Explorer misalnya. Menjengkelkan bukan?
Ini biasanya dilakukan oleh skrip PHP/ASP/CGI dengan memeriksa nilai header User-Agent yang dikirim browser. Lihat
Tabel 3 untuk melihat header-header yang dikirim berbagai program klien.
Secara default, wget mengaku dengan jujur bahwa dia memang
wget. Beberapa situs tidak menyukai wget dan hanya mau menerima Netscape
Navigator dan Internet Explorer. Untuk situs-situs seperti itu, kita bisa
berikan opsi -U (user-agent) agar
wget mengaku sebagai client lain. Misalnya: -U
MSIE (karena kebanyakan skrip hanya memeriksa keberadaan potongan
string ini), -U Mozilla/3.0
(meniru Netscape kuno), -U ' Mozilla/4.0
(compatible; MSIE 5.01; Windows NT 5.0)' (benar-benar menjiplak
User-Agent milik IE 5.01).
Bandingkan hasil dari dua perintah
berikut:
$ wget http://steven.haryan.to/hack-wget/check-ua.cgi
$ wget -U Mozilla http://steven.haryan.to/hack-wget/check-ua.cgi
Tantangan 3: Pengecekan Referer
Mirip dengan tantangan
sebelumnya, hanya kali ini halaman target mengecek header Referer. Biasanya si pemilik situs ingin
agar URL tersebut dicapai hanya dari halaman lain yang diinginkan (misalnya:
program atau video yang harus diklik dari halaman daftar film milik si pemilik
situs itu sendiri, untuk mencegah orang yang “mencuri” [leeching] dengan melink
langsung ke file program/video tersebut dari situs lain). Atau si pemilik situs
ingin halaman dalam situsnya tidak dicapai langsung dari luar, melainkan harus
dari pintu gerbang depan dulu (misalnya: karena ia ingin orang melihat banner
atau halaman warning).
Sayangnya (kadang dibaca:
untungnya), pengecekan ini mudah sekali dipatahkan. Skrip di server umumnya
mengecek keberadaan header Referer,
yang memang disuplai program klien (termasuk browser dan wget) jika URL yang
sedang diminta diklik atau ditelusuri dari halaman lain. Untuk menipu si skrip,
cukup berikan header yang diinginkannya. Opsi wget untuk menambahkan header
adalah --header. Bandingkan
hasil dari kedua perintah ini:
$ wget http://steven.haryan.to/hack-wget/download.cgi?program=download.cgi
$ wget --header 'Referer: http://steven.haryan.to/hack-wget/download/' \
http://steven.haryan.to/hack-wget/download.cgi?program=download.cgi
Tantangan 4: File antirobot
Keinginan: Saya ingin mendownload situs
ABC. Tapi waktu saya coba dengan wget -r, hanya halaman awal saja yang
terdownload; wget tidak mau mengikuti link. Ketika melihat log hasil wget -r,
saya amati file pertama yang didownload wget adalah /robots.txt. Bagaimana supaya saya bisa mendownload situs
tersebut?
Jawab: robots.txt
adalah sebuah konvensi untuk mengatur aktivitas robot yang datang ke sebuah
situs. Sintaksnya bisa Anda lihat di situs referensi yang disebutkan di “Resource”.
Pada intinya robots.txt mengatur wilayah mana yang boleh diakses robot, wilayah
mana yang tidak. Contoh sebuah robots.txt:
User-Agent: Wget/*
Disallow: /
User-Agent: *
Disallow: /cgi-bin/
File
tadi berbunyi: “Wget tidak boleh download mulai dari / (yang berarti tidak boleh sama sekali),
sementara semua robot tidak boleh mendownload wilayah /cgi-bin.” Umumnya robots.txt ini membantu robot menghindari
wilayah-wilayah yang “berbahaya” (misalnya: wilayah yang menghasilkan link
secara dinamik dan tanpa akhir). Tapi beberapa pemilik situs amat anti dengan
robot dan tanpa tedeng aling menutup semua akses robot:
User-Agent: *
Disallow: /
Yang
perlu Anda ketahui: robots.txt
ini sepenuhnya opsional dan advisory. Wget secara default bersikap sopan dan membaca
robots.txt serta mengikuti aturannya. Tapi jika Anda tetap perlu mendownload
sebuah file atau situs, berikan opsi -e
"robots=off" agar wget tidak mengacuhkan robots.txt.
Tantangan 5: Pengecekan Cookie
Cookie digunakan untuk
menciptakan stateful browsing. Maksudnya, sisi server jadi bisa tahu
halaman-halaman mana saja yang sudah dikunjungi dalam sebuah sesi browsing.
Berdasarkan hal ini, server bisa mencegat user yang belum masuk ke sebuah
halaman tertentu dan memaksanya melewati halaman itu dulu (misalnya: untuk
login).
Beberapa bulan yang lalu, untuk
menyedot arsip milis yang ada di Yahoo! Groups, kita tinggal memanfaatkan pola
URL:
http://groups.yahoo.com/group/NAMAMILIS/message/N
Besarnya N dapat kita intip dulu
dengan mengunjungi halaman muka milis lewat browser:
http://groups.yahoo.com/group/NAMAMILIS
Lihatlah link posting terakhir,
berapa id-nya. Katakanlah 500. Berarti kita tinggal melancarkan request untuk
message 1 hingga 500. Caranya misalnya dengan skrip Perl berikut ini:
$ perl -le 'for(1..500) { print
"http://groups.yahoo.com/group/milis-masterweb/message/$_"' } > daftarurl.txt
$ wget –x –i daftarurl.txt
Skrip Perl akan menghasilkan 500
baris berisi URL message 1 hingga 500 yang kita tulis ke file. Wget membaca
file ini dan mengambil satu demi satu URL-nya. Jika Anda ingin mengambil
attachment tiap posting, bisa dengan menggunakan opsi -p.
Tapi jika Anda coba perintah di atas
ini sekarang, Anda tidak akan mendapat apa-apa. Situs groups.yahoo.com melarang orang menembak
langsung ke halaman isi posting (message/N),
melainkan harus dari halaman daftar posting (messages/).
Jika Anda meminta sebuah halaman isi posting secara langsung, hasilnya adalah:
$ wget http://groups.yahoo.com/group/milis-masterweb/message/1
--23:26:08-- http://groups.yahoo.com/group/milis-masterweb/message/1
=> `groups.yahoo.com/group/milis-masterweb/message/1'
Connecting to groups.yahoo.com:80... connected!
HTTP request sent, awaiting response... 302
Location: http://groups.yahoo.com/group/milis-masterweb/auth?done=%2F
+group%2Fmilis-masterweb%2Fmessage%2F1 [following]
--23:26:11-- http://groups.yahoo.com/group/milis-masterweb/auth?done
+=/group/milis-masterweb/message/1
=> `groups.yahoo.com/group/milis-masterweb/auth?done=/grou
+p/milis-masterweb/message/1'
Connecting to groups.yahoo.com:80... connected!
HTTP request sent, awaiting response... 302
Location: http://groups.yahoo.com/group/milis-masterweb/auth?check=G&
+done=%2Fgroup%2Fmilis-masterweb%2Fmessage%2F1 [following]
--23:26:22-- http://groups.yahoo.com/group/milis-masterweb/auth?chec
+k=G&done=/group/milis-masterweb/message/1
=> `groups.yahoo.com/group/milis-masterweb/auth?check=G&do
+ne=/group/milis-masterweb/message/1'
Connecting to groups.yahoo.com:80... connected!
HTTP request sent, awaiting response... 302
Location: http://groups.yahoo.com/group/milis-masterweb/message/1 [fo
+llowing]
http://groups.yahoo.com/group/milis-masterweb/message/1: Redirection
+cycle detected.
Maaf, karena batas lebar kolom
mungkin output di atas kurang jelas. Yang terjadi adalah, Yahoo! melempar kita
ke halaman auth/ dan melempar
kita kembali ke halaman message/1,
hingga wget bingung dan menyerah (wget mengira redireksi balik ini adalah
sebuah loop). Agar wget tidak bingung dengan loop redireksi, maka Anda perlu
mempatch wget (untuk menambahkan opsi --no-cycle-detect,
lihat “Resource”) atau menunggu versi wget berikutnya di mana pengecekan loop
akan dihilangkan. Untuk saat ini saya anggap Anda menggunakan patch wget.
Pengecekan Yahoo! ini bukan pengecekan
Referer (yang mana tentu akan mudah ditembus). Bagaimana saya bisa tahu? Karena
saya telah mencobanya. Saya menyuntikkan header --header "Referer: …"
tapi ternyata Yahoo! tetap melempar saya berulang kali ke auth/ > message/1 > auth/
> message/1 > dst. Karena
halaman-halaman Yahoo! selalu memberikan cookie, ini menimbulkan kecurigaan
kita bahwa pengecekan dilakukan terhadap cookie. Bagaimana cara mengatasinya?
Jawabnya adalah dengan opsi --cookies on.
Jadi saat Yahoo! melempar kita ke auth/,
wget akan mengambil halaman ini dan menerima cookie. Setelah diredirect kembali
ke message/1, wget akan
mengirimkan cookie yang tadi diterimanya agar Yahoo! tahu bahwa auth/ telah dikunjungi. Ternyata Yahoo!
melempar ke auth/ sekali lagi,
kali ini dengan menyertakan parameter check=G.
Setelah wget mengikuti dan mengambilnya, dan kembali dilempar ke message/1, akhirnya kita mendapatkan
halaman tersebut. Berikut perintah untuk menyedot posting 1 hingga 500 dengan
wget yang sadar-cookie:
$ perl –le'$|++;for(1..500){ print "$_";
system "wget -x --no-cycle-detect --cookies=on -UMozilla/4.0
http://groups.yahoo.com/group/milis-masterweb/message/$_"
}'
--10:26:03-- http://groups.yahoo.com/group/milis-masterweb/message/1
=> `1'
Connecting to groups.yahoo.com:80... connected!
HTTP request sent, awaiting response... 302
Location: http://groups.yahoo.com/group/milis-masterweb/auth?...
[following]
--10:26:03-- http://groups.yahoo.com/group/milis-masterweb/auth?...
=> `auth?done=/group/milis-masterweb/message/1'
Connecting to groups.yahoo.com:80... connected!
HTTP request sent, awaiting response... 302
Location: http://groups.yahoo.com/group/milis-masterweb/auth?check=G...
[following]
--10:26:04-- http://groups.yahoo.com/group/milis-masterweb/auth?check...
=> `auth?check=G&done=/group/milis-masterweb/message/1'
Connecting to groups.yahoo.com:80... connected!
HTTP request sent, awaiting response... 302
Location: http://groups.yahoo.com/group/milis-masterweb/message/1
[following]
--10:26:11-- http://groups.yahoo.com/group/milis-masterweb/message/1
=> `1'
Connecting to groups.yahoo.com:80... connected!
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
0K .......... ...
10:26:12 (551.96 KB/s) - `1' saved [13565]
--10:26:03-- http://groups.yahoo.com/group/milis-masterweb/message/2
=> `2'
dst...
Tantangan 6: Cookie Persisten
Keinginan: Saya ingin mengambil arsip
Yahoo! Groups, tapi arsip ini hanya terbuka untuk member.
Jawab: Pertama, login dulu ke Yahoo! di
browser, atau gunakan browser Lynx
berkemampuan SSL atau links. Jika
menggunakan Lynx, pastikan setting PERSISTENT_COOKIES
adalah TRUE di lynx.cfg. Di form login, centanglah
pilihan Remember Me. Ini akan
menyebabkan Yahoo! mengirim cookie persisten yang mengingat login kita. Cookie
persisten ini akan kita ambil nanti, dan kita berikan pada wget.
Dua,
jadilah member milis tersebut apabila belum.
Tiga,
ambil cookienya. Dengan Lynx, cookie telah ada di direktori $HOME/.lynx_cookies, sementara di Netscape
Anda bisa mengambilnya dalam bentuk file cookies.txt
di direktori profile user Anda. Format cookie kedua program ini sama dan
didukung oleh wget.
Sekarang,
berikan opsi --load-cookies
untuk memuat cookie persisten ini sebelum mendownload.
$ wget -UMozilla -x --load-cookies=/home/steven/.lynx_cookies --no-cycle-detect \
--cookies=on http://groups.yahoo.com/group/NAMAMILIS/message/1
Tantangan 7: Iklan Interupsi
Masih
dengan Yahoo! Groups, setelah Anda berhasil mengambil posting 1 hingga 500,
ternyata masalahnya belum selesai. Tiap posting dengan id kelipatan 4 (mis: 4,
8, 12, dst.) ternyata hilang dari hasil download. Yang ada bukan message/N,
melainkan halaman-halaman bernama interrupt?st=….
Ini iklan interupsi. Memang sejak satu atau dua bulan lalu Yahoo! menerapkan
iklan interupsi, yaitu halaman perantara yang harus kita lewati sebelum sampai
ke URL akhir. Menjengkelkan bukan?
Berikut
ini salah satu cara mengakalinya. Kita membuat loop dengan skrip Perl misalnya,
agar bila halaman message/N yang kita inginkan belum ada, maka kita minta
ulang.
#!/usr/bin/perl
$|++;
open WGET,"| /usr/bin/wget -w3 -nc -x --no-cycle-detect --cookies=on -UMozilla/4.0 -i -";
for(;;) {
$masih_ada=0;
for(1..500) {
$masihada++,print WGET "http://groups.yahoo.com/group/milis-masterweb/message/$_\n" x 2
if !-e "./groups.yahoo.com/group/milis-masterweb/message/$_";
}
exit unless $masih_ada;
}
wait();
Lihat
baris yang diakhiri x 2. Anda bisa
ganti x 3 misalnya jika masih
belum mendapatkan posting-posting bernomor kelipatan 4. Ini trik untuk
mengakali halaman interupsi yang kadang diberikan dua kali berturut-turut oleh
Yahoo!. Jadi kita dari awal sudah meminta pada wget agar URL yang kita inginkan
diambil dua tiga kali. Tentu saja, dengan -nc
kita tidak akan mendownload dobel seandainya halaman yang asli sudah kita
peroleh.
Tantangan Pamungkas: Applet dan Javascript
Di
tantangan-tantangan sebelumnya kita telah melihat bahwa usaha pemilik situs
memblok wget tidaklah terlalu efektif. Wget dapat menyamar sebagai browser,
juga mendukung cookie, dan dapat memalsukan header HTTP manapun. Kalau Anda jadi pemilik situs, sekarang bagaimana
cara mengatasi hal ini? Anda perlu mencari apa yang betul-betul menjadi
karakteristik browser grafis yang tidak dimiliki wget. Tahu jawabannya? Tentu
saja: applet dan Javascript. Wget tidak memiliki engine Javascript maupun JRE,
dan meskipun punya pun, kita bisa membuat kode Javascript yang betul-betul
membutuhkan interaktivitas user agar dapat dibrowse. Tapi hati-hati, bisa-bisa
tidak hanya wget yang Anda tolak kedatangannya, semua user juga bisa kesal dan
meninggalkan situs Anda jauh-jauh.
Sebagai ganti <a href=...>, cobalah ganti dengan <a href=# onClick=…> dan letakkan
URL yang ingin Anda sembunyikan di dalam kode Javascript. Atau gantilah dengan
document.write("<a href=...>"). Buatlah ekspresi dan bukan
literal sederhana agar URL tidak mudah diambil dengan regex. Misalnya: a="p://boo.com/peeka.html"; document.write("<a
"+"href=htt"+a);.
Hati-hatilah agar tidak membuat URL
dengan pola yang mudah ditebak. Contohnya: www.comicsworld.com/c11-htm/c11-01-1.htm.
Seorang teman saya ingin mengambil semua buku komik di sana dengan Teleport
Pro. Tapi karena link ke daftar isi tiap buku komik ditulis dengan <a onClick…>, maka robot tidak dapat
mengambilnya. Terpaksa kita buka satu dua buku komik dengan browser.
Halaman 1 buku komik pertama: www.comicsworld.com/Html/c111501a-htm/C111501a-01.htm
Halaman 2 buku komik pertama: www.comicsworld.com/Html/c111501a-htm/C111501a-02.htm
Halaman 1 buku komik kedua: www.comicsworld.com/Html/c111501-htm/C111501-01.htm
dst.
Halaman 2 buku komik pertama: www.comicsworld.com/Html/c111501a-htm/C111501a-02.htm
Halaman 1 buku komik kedua: www.comicsworld.com/Html/c111501-htm/C111501-01.htm
dst.
Anda sudah dapat melihat polanya?
Tiap buku komik mungkin kurang pasti pola direktorinya, karena itu kita ambil
secara manual. Tapi untuk mengambil halaman satu hingga terakhir dari sebuah
buku komik, kita tinggal memainkan digit terakhirnya. Rata-rata buku komik
tebalnya 28-36 halaman—kita ambil saja patokan 36 halaman—dan dengan skrip
sederhana ini:
$ perl –le 'for (01..80) {
print "http://www.comicsworld.com/Html/c111501-htm/C111501-$_.htm" }' > komik1.txt
$ wget –x –p –i komik1.txt
kita bisa melewati Javascript-nya
sama sekali dan langsung mengambil semua halaman buku komik.
Proteksi yang lebih canggih
biasanya menggunakan URL random yang tidak bisa ditebak polanya begitu saja.
Tapi dengan sedikit usaha lebih, kita masih bisa mengekstrak URL yang
dibutuhkan. Sebagai PR dan tantangan untuk Anda, cobalah ambil “seluruh manual
untuk SAP R/3 Release 4.6c bahasa Inggris” menggunakan wget dan skrip/regex
(Catatan: ukuran totalnya mencapai puluhan MB). Situs tempat manual ini berada,
help.sap.com, dipenuhi kode Javascript. Tree
navigasi kiri frame sepenuhnya dibuat dengan Javascript (sampai-sampai
lambatnya minta ampun). Hint: pertama browselah dengan browser hingga sampai ke
halaman daftar isi manual. Ambil URL frame navigasi kiri. Cobalah intip source
codenya. Di sini Anda akan melihat bahwa URL-URL relatif tiap halaman manual
diapit dalam fungsi Javascript. Tugas Anda adalah mengekstrak URL tersebut,
dengan regex misalnya. Kumpulkan semuanya, suapkan ke wget. Hint tambahan:
pakai opsi -p, -I, -r,
dan -np. Setelah itu Anda
mungkin harus membuat frame navigasi baru yang bebas Javascript.
Jika Anda bisa mengambil semuanya
dengan sukses, barangkali Anda boleh mulai menyebut diri dengan gelar “si raja
download.”
Penutup
Dengan berbagai opsi wget, dan
kadang dengan bantuan skrip, Anda bisa menyaru sebagai browser dan mendownload
hampir semua halaman dan situs mana saja yang Anda suka. Biasanya dibutuhkan
dulu coba-coba untuk mengetahui pengecekan macam apa yang diberlakukan oleh
server (mis: header Referer, User-Agent, cookie, atau kombinasi ketiganya).
Situs dengan Javascript pun kadang bisa Anda ambil dengan wget bersama bantuan
skrip regex. Jangan cepat menyerah, coba-coba terus. Tapi selalulah hati-hati
agar tidak melakukan overgrabbing dan memboroskan bandwidth.
Anda
dapat juga memilih menggunakan pavuk ketimbang wget. Keduanya sama-sama masih
aktif dikembangkan. Pavuk memiliki beberapa fitur lain yang belum dimiliki wget
seperti multithreading dan membaca tag Javascript, tapi jangan berharap banyak
yang terakhir ini akan membuat Anda dapat mengambil semua situs yang diproteksi
dengan kode Javascript. Fitur pavuk lain yang belum ada di wget adalah request
POST (ada patch buat wget untuk hal ini, tapi hingga sekarang belum diintegrasi
ke distribusi wget). Selain pavuk, Anda bisa mencoba curl. Curl mendukung protokol-protokol lain seperti telnet, ldap,
gopher, mendukung metode PUT HTTP dan upload FTP, serta didukung oleh PHP.
(Lihat artikel boks “Download Mutasi Rekening BCA dengan Curl.”) Ada juga fitur
yang belum dimiliki baik wget, pavuk, maupun curl, seperti swarming/split
download (mendownload bagian-bagian sebuah file besar secara paralel), tapi
fitur ini toh hanya bermanfaat menambah sedikit kecepatan download di lingkungan
high latency (seperti di koneksi dialup).
Resource
Homepage wget: sunsite.dk/wget/
Homepage pavuk: www.idata.sk/~ondrej/pavuk/
RPM Database: rpmfind.net
Sintaks file robots.txt: www.robotstxt.org/
Patch wget --no-cycle-detect: steven.haryan.to/wget-1.8.1-nocycledetect.patch
0 comments:
Posting Komentar
PEDOMAN KOMENTAR
Ayo berpartisipasi membangun budaya berkomentar yang baik. Pantang bagi kita memberikan komentar bermuatan menghina atau spam.
Kolom komentar tersedia untuk diskusi, berbagi ide dan pengetahuan. Hargai pembaca lain dengan berbahasa yang baik dalam berekspresi. Setialah pada topik. Jangan menyerang atau menebar kebencian terhadap suku, agama, ras, atau golongan tertentu.
Bangun sharing ilmu dengan berkomentar disini :