Kamis, 19 Juni 2014

Mendownload File dengan API URLDownloadToFile di C (File Ukuran Kecil)



Di windows ada beberapa metode untuk mengambil sebuah file dari Internet, yaitu dengan menggunakan library eksternal seperti libcurl, atau dengan library internal windows sendiri. Dalam hal ini, Windows telah menyediakan beberapa library yang dapat kita manfaatkan untuk mengunduh file dari internet, yaitu urlmon.dll dan wininet.dll.

Pada tulisan ini, kita akan membahas penggunaan API URLDownloadToFile dari library urlmon.dll. Library ini merupakan salah satu komponen pendukung program Internet Explorer. Jadi, dapat dipastikan semua sistem operasi Windows bisa menggunakan library ini.
Jika ingin mempelajari lebih lanjut tentang cara penggunaan API ini, kunjungi link berikut.
http://msdn.microsoft.com/en-us/library/ie/ms775123%28v=vs.85%29.aspx

Bentuk prototype fungsi URLDownloadToFile adalah sebagai berikut:

HRESULT URLDownloadToFile(
  LPUNKNOWN pCaller,
  LPCTSTR szURL,
  LPCTSTR szFileName,
  DWORD dwReserved,
  LPBINDSTATUSCALLBACK lpfnCB
);

Library urlmon.dll sebenarnya ditulis dalam C++, sehingga beberapa argumennya tidak bisa dimasukkan dengan mudah jika kita menggunakan bahasa C. Untungnya, beberapa parameter tersebut bisa kita abaikan saat menggunakannya dalam bahasa C. Beberapa parameter yang tidak bisa digunakan tersebut digunakan untuk mengetahui detail dari proses download yang sedang berjalan. Seingga tanpa menyertakan parameter tersebut, kita tidak bisa mengetahui progress download secara detail. Saya rekomendasikan untuk menggunakan API ini untuk mendownload file ukuran kecil, Fungsi ini akan segera kembali setelah proses download selesai. Jadi, tanpa progress pun tak apa-apa.

pCaller : abaikan
szUrl : pointer ke string yang menyimpan URL file. Link file harus URL direct link.
szFilename : pointer ke string yang menyimpan path file hasil download
dwReserved : Harus 0
lpfnCB : abaikan

Jika fungsi ini sukses, maka akan mengembalikan nilai konstan S_OK. Selain itu, fungsi ini dapat mengembalikan E_OUTOFMEMORY jika memori tidak cukup, atau INET_E_DOWNLOAD_FAILURE jika ada masalah dengan koneksi internet.

Contoh

#include <windows.h>
#include <stdio.h>
char link[] = "http://zlib.net/zlib128-dll.zip";
char filename[] = "E:/zlib128-dll.zip";
HRESULT h;
int main()
{
    printf("downloading...\n");
    h = URLDownloadToFile (0,link,filename,0,0);
    if(h == S_OK) printf("download sukses\n");
    else printf("download gagal\n");
}


Hasil



Load disqus comments

0 comments