Download File - Stažení souboru z internetu
Tato glosa pomůže všem, kteří hledají nejjednodušší způsob stahování souborů z internetu v jazyce Perl. Konkrétně nám pomůže modul LWP::UserAgent. Postupně budu psát jednotlivé řádky kódu a popisovat jej.
Nejprve potřebujeme připojit všechny potřebné moduly. Jsou to HTTP::Request a již zmíněný LWP::UserAgent.
use HTTP::Request::Common qw(GET HEAD); use LWP::UserAgent;
Všimněte si, že mohu předem specifikovat, které požadavky na server budu mít. Požadavek typu HEAD není povinný, ale budu na něm demostrovat ještě jednu, hezkou funkci modulu use LWP::UserAgent;, konkrétně získání mime typu stahovaného souboru.
Vytvoříme instanci UserAgenta a nastavíme jej pro naše požadavky. V hlavičce každého požavku je také uvedeno, jaký typ klienta o příslušný soubor žádá. Můžeme server trochu zmást tím, že se budeme tvářit jako bychom byli prohlížeč Mozilla.
my $ua = LWP::UserAgent->new; # vytvoření instance UserAgenta $ua->agent("Mozilla/8.0"); # určení, jak se bude UA hlásit serveru
Budeme potřebovat dvě proměnné a to objekt pro HTTP požadavek(request) a objekt pro odpověď od serveru(response).
my $request; my $response;
Nastavíme objekt požadavku pro stažení HTTP hlavičky souboru umístěného na příslušné webové adrese a pomocí UserAgentovy funkce request hlavičku stáhneme. Výsledek operace se uloží do proměnné response, odkud si knihovní funkcí vytáhneme MIME type. V tomto ukázkovém příkladě MIME jenom vypíšeme, ale prakticky s ním jde dělat cokoli.
$request = HEAD 'http://ukazka.tld/soubor.typ'; $response = $ua->request($request); print $response->content_type(); # vypíše MIME type
Stejně jednoduše jako typ obsahu stáhneme i celý soubor nebo stránku. Kód maličko pozměníme tak, aby serveru posílal požadavky typu GET a přidáme druhý parametr UserAgentovy funkci request, kterým určíme jméno stahovaného souboru. Nakonec zkontrolujeme úspěšnost stahování souboru.
$request = GET 'http://ukazka.tld/soubor.typ'; $response = $ua->request($request, "soubor.typ"); if ( $response->is_success ) { print "Soubor byl úspěšně stažen.\n"; } else { print "Nepodařilo se stáhnout soubor.\n"; }
Pokud se stažení souboru podařilo, najdeme jej (v tomto případě) ve stejném adresáři jako spuštěný skript.
Podívejte se blíže na modul UserAgent. Jedná se o výborného pomocníka při práci s protokolem http.
Fragment kódu
use HTTP::Request::Common qw(GET HEAD); use LWP::UserAgent; my $ua = LWP::UserAgent->new; $ua->agent("Mozilla/8.0"); $request = HEAD 'http://ukazka.tld/soubor.typ'; $response = $ua->request($request); print $response->content_type(); $request = GET 'http://ukazka.tld/soubor.typ'; $response = $ua->request($request, "soubor.typ"); if ( $response->is_success ) { print "Soubor byl úspěšně stažen.\n"; } else { print "Nepodařilo se stáhnout soubor.\n"; }