Ini tulisan pertama di seri CLI, saya mulai langsung dengan 2 tools yang bernama curl dan wget. Keduanya memiliki fungsi dasar yang sama: mendownload sesuatu dari sebuah URL. Untuk hal sangat dasar tersebut, keduanya serupa, tapi ada perbedaan fitur yang lebih advanced.
Pemakaian sederhana wget adalah:
wget https://blog.compactbyte.com/robots.txt
Defaultnya wget akan menyimpan di file robots.txt
Sementara jika kita melakukan hal yang sama dengan curl:
curl https://blog.compactbyte.com/robots.txt
Hasilnya langsung muncul di stdout
Supaya curl menyimpan di robots.txt, gunakan parameter -O. Seperti ini:
curl -O https://blog.compactbyte.com/robots.txt
Bagaimana kita bisa tahu berbagai opsi ini? dari manual pagenya. Contohnya ini potongan bagian untuk opsi -O di curl
-O, --remote-name
Write output to a local file named like the remote file we get. (Only the
file part of the remote file is used, the path is cut off.)
The file will be saved in the current working directory. If you want the
file saved in a different directory, make sure you change the current
working directory before invoking curl with this option.
Sebaliknya, jika kita ingin wget menampilkan ke stdout seperti curl, kita bisa memakai
wget -q https://blog.compactbyte.com/robots.txt -O -
Opsi -q tidak wajib, hanya agar tidak terlihat ada progress bar sehingga tampilannya mirip curl. Sementara opsi -O – (minus O besar, lalu minus) artinya agar output diarahkan ke stdout.
Inti dari perbandingan di atas adalah: dalam beberapa dasar hal wget dan curl bisa melakukan hal yang sama. Tapi jika kita memakai fitur lanjutannya, baru terlihat perbedaannya. Saya mulai dengan wget dulu. Wget ini yang dulu saya pakai kali pertama ketika kuliah. Tujuan pemakaiannya adalah: mendownload sesuatu di server kampus untuk saya ambil esok hari. Wget punya opsi -b (supaya bekerja di background) dan -c (resume/continue download).
Mirroring Website
Ini adalah kelebihan wget: membuat mirror sebuah website dengan opsi –mirror. Dengan mirror, maka selain sebuah halaman didownload, isi HTML akan diparse, dan file gambar serta link lain dari halaman tersebut juga akan didownload. Ini harus hati-hati karena website jaman sekarang ukurannya puluhan mega hingga ratusan gigabyte. Di jaman saya kuliah dulu, ukuran website (total) biasanya hanya ratusan kilobyte hingga beberapa megabyte.
Kita bisa membatasi agar wget tidak naik ke direktori tertentu dengan opsi -np (no parent), misalnya jika ada sesuatu artikel di direktori /main/articles, maka kita bisa melakukan ini:
wget --mirror -np http://example.com/main/articles/
Yang artinya: jika ada link ke parent directory (ke http://example.com atau http://example/com/main) maka jangan ikut link itu. Opsi -l <N> juga bisa ditambahkan agar tidak mengambil lebih dari N level directory.
Request yang kompleks
Curl memiliki kelebihan untuk bisa melakukan berbagai request yang kompleks DAN didukung oleh berbagai browser di bagian network monitornya. Pertama saya tunjukkan dulu yang saya maksud:
Ada opsi “Copy as cURL” yang kemudian bisa kita paste di console. Dengan ini kita bisa menyertakan semua header termasuk juga Cookie, “Content-Type” dsb. Dari command line kita bisa mengubah-ubah apapun.
Hebatnya lagi hasil copy dari curl itu bisa dijadikan kode program dengan situs https://curl.trillworks.com/ yang siap untuk dimodifikasi.
Curl mendukung jauh lebih banyak protokol dibandingkan wget, yaitu: DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET dan TFTP. Tidak semua ini diaktifkan, tapi biasanya HTTP dan FTP aktif.
Upload File
Baik wget maupun curl dapat digunakan untuk upload file ke sebuah server HTTP yang menerima file upload. Artinya kita perlu memiliki sebuah URL yang menerima upload.
Curl mendukung juga upload melalui FTP/SCP dsb. Hal ini bisa berguna untuk mengupload sesuatu ke FTP server, misalnya dengan:
curl -T namafile ftp://example.com/files/
Saya kadang menggunakan kedua fitur tersebut ketika pentesting: jika kita tidak bisa melihat output sebuah command, saya bisa mengupload hasil command ke sebuah server.
Penutup
Masih banyak lagi fitur-fitur wget dan curl, tapi bahasan di atas setidaknya cukup bisa memberi pencerahan mengenai fitur-fitur dasar yang bisa kita pakai.
Sebagai tambahan baik wget maupun curl tidak bisa mendownload dengan banyak koneksi. Untuk download multithreading (mendownload 1 file dengan banyak koneksi) saya memakai aria2, seperti ini:
aria2c -x10 URL
Dengan ini saya bisa mendownload lebih cepat. Tapi ini jarang saya lakukan (koneksi internet di rumah sudah sangat cepat).