HTTPGet aneb stahování v Delphi jednoduše - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Komponenty

HTTPGet aneb stahování v Delphi jednoduše

7. března 2001, 00.00 | Popis a ukázka použití komponenty HTTPGet, která jednoduše a prakticky řeší otázku, jak stahovat soubory z Interentu.

Pokud jste někdy vyvíjeli aplikace v Delphi, které měly co do činění s Internetem, určitě jste narazili na problém, který by se dal formulovat takto: Jak stáhnout stránku (či jiný soubor) do svého programu přes protokol HTTP. Odpovědí na tuto otázku je jednoduchá komponenta HTTPGet od Utilmind Solutions.

Co umí? Stáhnout libovolný dokument na síti dostupný pomocí HTTP do souboru nebo jeho obsah vrátit jako řetězec. Nic víc, ale také nic míň.

Komponenta má spoustu nastavení. Po jejím umístění na formulář byste měli určitě upravit následující vlastnosti:

  • AcceptTypes - množina MIME typů, které komponenta od serveru přijme, většinou ale můžete ponechat */*
  • Agent - "podpis", pod jakým se bude vaše aplikace serveru hlásit
  • BinaryData - nastavte na True, pokud hodláte stahovat binární soubory; False nechte pro textové soubory a HTML stránky
  • URL - adresa souboru, který chcete stáhnout
  • PostQuery - zde můžete vyplnit tělo dotazu metodou POST. Pokud zde necháte prázdný řetězec, použije se metoda GET
  • Cache - nastavte na True, pokud chcete používat cache Microsoft Internet Exploreru

Tak a teď k vlastnímu stahování. Od toho jsou v komponentě dvě metody:

GetFile

Zahájí stahování do souboru určeného vlastností FileName. Na konci stahování je generována událost OnDoneFile.

GetString

Zahájí stahování, jehož výsledek (obsah stáhnutého souboru) bude uložen v parametru String události OnDoneString, která se vyvolá po dokončení stahování.

Celé stahování (ať už pomocí GetFile nebo GetString) se odehrává na pozadí (ve speciálním vlákně) a program tedy během něj "nezamrzne". Pokud je nastavena hodnota BinaryData na True, během stahování se periodicky vyvolává událost OnProgress. Ta může sloužit třeba k updatu pozice nějaké lišty či obdobného indikátoru postupu stahování. Kdyby se náhodou při stahování vyskytla nějaká chyba, dozvíte se o ní pomocí události OnError.

Ukázka použití - jednoduchý program na stahování souborů

Aby bylo vidět, jak jednoduché je použití komponenty, ukážeme si nyní jako příklad jednoduchou aplikaci na stahování souborů. Na formulář umístěte komponentu HTTPGet (které nastavíme vlastnost BinaryFile na True), jeden TEdit a tlačítko s nápisem "Stáhnout". Po přidání ProgressBaru (na zobrazování postupu stahování), SaveDialogu (uživatel musí mít možnost si vybrat, kam stahovaný soubor uložit) a pár "lejblíků" může hlavní formulář našeho programu vypadat zhruba takhle:

Hlavní formulář ukázkové aplikace

Na tlačítko Stáhnout teď "pověsíme" proceduru, která nejdříve nechá uživatele vybrat si místo, kam se soubor uloží a pak začne vlastní stahování:

procedure TForm1.Button1Click(Sender: TObject);
begin
if SaveDialog1.Execute then
begin
HTTPGet1.URL := Edit1.Text;
HTTPGet1.FileName := SaveDialog1.FileName;
HTTPGet1.GetFile;
end;
end;

Také ošetříme postupné posouvání lišty indikující stav stahování a případný chybový stav:

procedure TForm1.HTTPGet1Progress(Sender: TObject; TotalSize,
Readed: Integer);
begin
ProgressBar1.Max := TotalSize;
ProgressBar1.Position := Readed;
Label2.Caption := Format('Stáhnuto %d bajtů z %d (%d%%)',
[Readed, TotalSize, Round(100 * Readed / TotalSize)]);
end;

procedure TForm1.HTTPGet1Error(Sender: TObject);
begin
Application.MessageBox('Při stahování nastala chyba.', 'Chyba', MB_ICONSTOP);
end;

Nakonec přidáme proceduru, která upraví vzhled okna aplikace po skončení stahování:

procedure TForm1.HTTPGet1DoneFile(Sender: TObject; FileName: String;
FileSize: Integer);
begin
ProgressBar1.Position := 0;
Label2.Caption := 'Staženo';
end;

Myslím, že kód procedur je vcelku jasný a pochopitelný. Pokud nyní program spustíme, neměl by být problém stáhnout pomocí něj jakýkoliv soubor na Internetu dostupný přes HTTP protokol, známe-li jeho URL. Náš ukázkový program má samozřejmě hodně daleko ke GetRightu nebo Go!Zille, ale je to dobrá ukázka toho, jak lze s pomocí komponenty HTTPGet kostru obdobné aplikace vytvořit za pár minut.

Co říct závěrem?

Řekl bych, že komponenta je velmi jednoduchá na použití (jednodušeji to snad už udělat nejde) a plní přesně svůj účel. Jediné, co bych snad uvítal, by byla možnost ručního přidání některých HTTP hlaviček do dotazu před odesláním.

Komponenta je úplně zdarma a funguje s Delphi 3, 4, 5 a C++ Builderem 3, 4 a 5. K HTTPGet se dodává i zdrojový kód, takže cesta k modifikacím a rozšířením komponenty "k obrazu svému" je otevřená.

Kontakt: http://www.utilmind.com

Stáhnout: http://www.utilmind.com/delphi/httpget.zip

Tématické zařazení:

 » Rubriky  » Komponenty  

 » Rubriky  » Delphi  

 » Rubriky  » Windows  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: