Download binärer Daten über HTTP von Perl aus?

hallo Leute

Ich möchte von einem Perl-Skript aus über HTTP von einem Webserver binäre Daten runterladen. Im Prinzip geht es darum, dass das Startskript einer JAVA-Anwendung selbständig nach Patches suchen und diese downloaden soll. (nein, Webstart ist leider keine Option!).

Ich habe schon etwas mit den Modulen LWP::UserAgent, HTTP::Request::Common und HTTP::Headers herumgespielt und bin immerhin soweit, dass ich beliebige Textdateien downloaden kann.

Probleme habe ich allerdings mit binären Dateien, da scheinbar alle Bytes
$ua = LWP::UserAgent->new;
$req = GET „http://www.test.org/file.zip

$ua->agent(‚Mozilla/4.0 (compativle; MSIE 5.0:wink:‘);
$req->header(‚Host‘ => „www.test.org“ );

$aw = $ua->request($req);

if ($aw->status_line =~ /200 OK/i) {
open (out,">file.zip") or die „unable to open file.zip for write“ ;
print OUT $aw->as_string ;
close OUT ;
}

zur Erklärung: den Code habe ich von einem anderen Skript abgetippt, der sich nur mit dem Download einer Textdatei beschäftigt. Mit Perl selbst arbeite ich immer wieder etwas, die HTTP-Module kenne ich aber noch nicht so gut.

Kann mir jemand einen Tipp/ein Beispiel liefern, wie man eine binäre Datei vom Intranet aus auf die Platte kopiert. Andere Tools wie wget o.ä. scheiden leider aus - muss entweder mit Perl oder mit Java klappen - und bei Java dauert das Initialisieren der VM in diesem speziellen Fall zu lange. Ich bin auch mit einem Link auf eine vernünftige Seite zufrieden, auf der die Perl-Module so erklärt werden, dass sich auch ein „Anfänger“ auskennt.

LG
Erwin

Hallo,

Ich habe schon etwas mit den Modulen LWP::UserAgent,
HTTP::Request::Common und HTTP::Headers herumgespielt und bin
immerhin soweit, dass ich beliebige Textdateien downloaden
kann.

Probleme habe ich allerdings mit binären Dateien, da scheinbar
alle Bytes

Hallo,

use LWP::Simple;

getstore("http://example.com/file.zip", "filename");

reicht nicht ?

Alexander

hallo Leute

Ich möchte von einem Perl-Skript aus über HTTP von einem
Webserver binäre Daten runterladen. Im Prinzip geht es darum,
dass das Startskript einer JAVA-Anwendung selbständig nach
Patches suchen und diese downloaden soll. (nein, Webstart ist
leider keine Option!).

use LWP::Simple;

getstore(„http://example.com/file.zip“, „filename“);

reicht nicht ?

werde ich frühestens am montag abend rausfinden - wenn ich wieder im büro bin…

vermutlich wird es reichen, wenn es tatsächlich so einfach geht wie im eispiel. vielen dank dafür.

nebenbei: gibt es irgendwo im netz eine VERNÜNFTIGE doku zu den modulen? also mit einer beschreibung, die man auch ohne abgeschlossenen studium versteht und mit beispielen und so? die doku, die ich mit google finde, ist etwas abstrakt, um es mal höflich zu formulieren.

erwin

Ich weiss, dass das ein böser Hack ist, aber unter unix
könntest du einfach system(„wget $url“); oder sowas verwenden.

nachdem ich draufgekommen bin, dass wget tatsächlich standardmässig auf unseren pcs installiert ist, ist es tatsächlich eine lösung - soferne ich mit der lösung von alexander nicht glücklicher werde…

erwin

Hallo,

nebenbei: gibt es irgendwo im netz eine VERNÜNFTIGE doku zu
den modulen? also mit einer beschreibung, die man auch ohne
abgeschlossenen studium versteht und mit beispielen und so?
die doku, die ich mit google finde, ist etwas abstrakt, um es
mal höflich zu formulieren.

Merkwürdig - ich finde die Dokumentation bei Perl sehr praxisbezogen. Aus perldoc LWP::Simple:

SYNOPSIS
 perl -MLWP::Simple -e 'getprint "http://www.sn.no"'

 use LWP::Simple;
 $content = get("http://www.sn.no/");
 die "Couldn't get it!" unless defined $content;

Da sind schon getprint und get implizit erklärt. Weiter unten folgt dann die genauere Beschreibung. Z.B:

 getstore($url, $file)
 Gets a document identified by a URL and stores it in the file. The
 return value is the HTTP response code.

Reicht dir das nicht?

Grüße,
Moritz

Nachtrag zur Doku
Hallo,

ganz unten in perldoc LWP::Simple steht bei „SEE ALSO“ noch als Hinweis lwpcook.
perldoc lwpcook sollte genau das sein, was du brauchst.

Grüße,
Moritz

1 Like

hi Moritz

habe endlich das ganze ausprobieren können. asche auf mein haupt - du hast natürlich vollkommen recht. irgendwie hat mir der hinweis auf perldoc gefehlt (wie konnte ich nur leben ohne perldoc). auch der hinweis auf lwp::simple ist für mich extrem hilfreich - aus dem unübersichtlichen codemonster wurde ein schlankes, leicht wartbares skriptchen. bekommst ein paar sternchen…

erwin