[Delphi] Download programmato documento da indirizzo Web.
Nei nostri programmi spesso ci capita di dover scaricare, da internet e con cadenza programmata, dei file ed aggiornare quelli presenti sul nostro computer. La soluzione più semplice, oltre a quella di collegarci sul sito di riferimento ed effettuare manualmente il download, sarebbe quella di inserire sulla nostra applicazione un’opzione di auto aggiornamento.
Delphi ci permette di accedere all’API WinInet, tramite quest’ultima possiamo connetterci e scaricare file da qualsiasi sito web che utilizza protocolli HTTP (HyperText Transfer Protocol) o FTP (File Transfer Protocol).
Per quanto riguarda il download di file da internet, procediamo come segue:
- inseriamo fra le uses l’API che andremo ad utilizzare: WinInet;
uses WinInet; - creiamo una funzione per il download del file;
function GetInetFile(const fileURL, FileName: String):boolean;
const
BufferSize=1024;
var
hSession, hURL:HInternet;
Buffer: array[1..BufferSize] of Byte;
BufferLen: DWORD;
f:File;
sAppName: string;
begin
result :=false;
sAppName := ExtractFileName(Application.ExeName);
hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try
hURL := InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0);
try
AssignFile(f, FileName);
Rewrite(f, 1);
repeat
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
BlockWrite(f, Buffer, BufferLen)
until BufferLen = 0;
CloseFile(f);
result := true;
finally
InternetCloseHandle(hURL)
end
finally
InternetCloseHandle(hSession)
end
end; - richiamiamo la funzione per scaricare il file.
Scegliamo il componente da inserire sulla form, generalmente viene utilizzato un TTimer, doppio click ed inseriamo il codice per chiamare la funzione per il download:
var
s: string;
const
internet: string = ‘indirizzo_internet’;
begin
if GetInetFile(internet, s) then
ShowMessage(’File scaricato con successo’);
else
ShowMessage(’Errore: il file non è stato scaricato.’);
end;