Penerapan cURL (client URL) seringkali digunakan untuk mendapatkan atau mengirim data dari/ke sebuah situs dengan URL tertentu, baik dengan cara GET maupun POST. Apakah hanya itu penerapannya? Ternyata tidak, cURL juga dapat digunakan untuk mengunduh/download file dari sebuah situs tertentu. Lebih jauh lagi, dengan kemampuan tersebut dapat dibuat sebuah robot script yang dapat secara otomatis mengunduh file-file yang diinginkan dari sebuah situs.
Pada tutorial kali ini, saya mencoba menshare pengalaman pribadi bagaimana membuat script robot dengan cURL di PHP yang digunakan untuk mengunduh ratusan file dari sebuah situs secara otomatis.
Teknik Dasar cURL di PHP untuk Mengunduh File
Di dalam PHP, biasanya sudah terdapat library cURL yang sudah bisa langsung dimanfaatkan.
Langkah-langkah dasar untuk mengunduh file dari sebuah situs dengan script PHP adalah sebagai berikut:
- Tentukan URL dari file yang akan dijadikan target unduhan
- Lakukan inisialisasi cURL
- Lakukan setting URL file ke dalam option di cURL
- Lakukan setting nama file hasil unduhan di dalam komputer
- Jalankan request cURL
Berdasarkan langkah di atas, kita bisa susun script PHP seperti berikut
<?php // url target unduhan $url = "http://..."; // inisialisasi curl handler $ch = curl_init(); // setting option url target di curl curl_setopt($ch, CURLOPT_URL, $url); // setting option nama file hasil unduhan $filename = "..."; $fp = fopen($filename, 'wb'); curl_setopt($ch, CURLOPT_FILE, $fp); // jalankan curl curl_exec($ch); // tutup curl curl_close($ch); // tutup file hasil unduhan fclose($fp); ?>
Bagian terpenting dari script di atas adalah bagian berikut ini
$filename = "..."; $fp = fopen($filename, 'wb'); curl_setopt($ch, CURLOPT_FILE, $fp);
Perintah di atas dimaksudkan untuk secara otomatis membuat file baru di komputer dengan nama $filename
, yang mana file ini merupakan hasil unduhan via cURL. Apabila diinginkan nama file hasil unduhan ini sama dengan nama file aslinya, maka nilai dari variabel $filename
ini bisa diisi dengan string nama file aslinya.
Adapun mode 'wb'
dalam fopen()
bermakna bahwa file tersebut dibuka dengan mode ‘write binary’. Pemilihan mode ‘binary’ dalam proses creating file ini dirasa lebih aman dibandingkan jika non binary.
Implementasi di Robot AutoDownload
Selanjutnya teknik di atas akan kita coba gunakan untuk mengunduh beberapa file target. Misalkan diberikan sebuah file berisi list URL file yang akan diunduh sbb:
urls.txt
http://i363.photobucket.com/albums/oo75/rosihanari/gammu01-3.jpg http://i363.photobucket.com/albums/oo75/rosihanari/tabel-1.jpg http://i363.photobucket.com/albums/oo75/rosihanari/fb01.jpg http://i363.photobucket.com/albums/oo75/rosihanari/fb03.jpg http://i363.photobucket.com/albums/oo75/rosihanari/fb02.jpg http://i363.photobucket.com/albums/oo75/rosihanari/plot1.png http://i363.photobucket.com/albums/oo75/rosihanari/plot2.png http://i363.photobucket.com/albums/oo75/rosihanari/plot3.png http://i363.photobucket.com/albums/oo75/rosihanari/paging.jpg
Selanjutnya kita akan buat sebuah script robot dalam PHP untuk mengunduh sebuah file yang ada di file urls.txt di atas.
getfile.php
<?php // open file urls.txt $myfile = fopen("urls.txt", "r"); // proses membaca isi file urls.txt while(!feof($myfile)) { // baca baris demi baris url $url = fgets($myfile); // mengambil nama file dari url $split = explode("http://i363.photobucket.com/albums/oo75/rosihanari/myimages/", $url); $filename = $split[1]; // proses unduh dengan curl $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); $fp = fopen($filename, 'wb'); curl_setopt($ch, CURLOPT_FILE, $fp); curl_exec($ch); curl_close($ch); fclose($fp); } // tutup file urls.txt fclose($myfile); ?>
Pada script PHP di atas, nama file hasil unduhan disesuaikan dengan nama file aslinya dari URL. Dalam hal ini, cara paling mudah untuk mendapatkan nama filenya adalah dengan melakukan explode()
dikarenakan nama URL nya sama semuanya (yang beda hanya nama filenya saja).
Dengan membuat robot autodownload di atas, akan sangat membantu proses download file apalagi jumlah file yang diunduh sangat banyak. Studi kasus di atas saya terapkan untuk mengunduh sekitar 200 an file image yang saya hostingkan di photobucket. Hal ini dilakukan karena photobucket tidak menyediakan fitur untuk download all files sekaligus, melainkan hanya tersedia fitur download per file 🙁
Sebenarnya di PHP, selain menggunakan cURL, bisa pula dibuat script unduh file dengan memanfaatkan function file_get_content()
. Namun, teknik ini seringkali gagal dikarenakan adanya proteksi dari server target yang tidak membolehkan pembacaan isi file targetnya.
Semoga tutorial ini bisa bermanfaat dan silakan dikembangkan sendiri sesuai kebutuhan yang diinginkan.