perl speichern Sie eine Datei heruntergeladen von lwp

8

Ich benutze LWP, um einen ausführbaren Dateityp herunterzuladen und mit der Antwort im Speicher kann ich die Datei hashen. Wie kann ich diese Datei auf meinem System speichern? Ich denke, ich bin auf der falschen Spur mit dem, was ich unten versuche. Der Download ist erfolgreich, da ich den Hash korrekt erzeugen kann (ich habe es überprüft, indem ich die eigentliche Datei heruntergeladen und die Hashes verglichen habe).

%Vor%

Wenn Sie sich fragen, warum ich nicht alles herunterlade, dann analysiere den Ordner für jede Datei und jeden Hash, weil ich alle diese Dateien in einer Schleife herunterlade. Und während jeder Schleife lade ich die relevante Quell-URL (in der diese Datei gefunden wurde) zusammen mit dem Dateinamen und Hash in eine Datenbank auf einmal.

    
Marcus Hart 06.12.2012, 09:42
quelle

2 Antworten

9

Versuchen Sie getstore() von LWP::Simple

%Vor%     
Demnogonis 06.12.2012, 09:49
quelle
2

getstore ist eine ausgezeichnete Lösung, aber für jeden, der diese Antwort in einer etwas anderen Konfiguration liest, löst es das Problem möglicherweise nicht.

Zunächst könnte es sein, dass Sie nur unter einem Binär- / Textproblem leiden.

Ich würde

ändern %Vor%

bis

%Vor%

Der Grund, warum ich das besser finde, ist, dass wenn Sie einige Einstellungen für Ihr Browser-Objekt ($ ua) vorgenommen haben, werden diese in GetStore von LWP :: Simple ignoriert, da es einen eigenen Browser verwendet.

Außerdem verwendet es die Drei-Parameter-Version von open, die sicherer sein sollte.

Eine andere Lösung wäre, die Callback-Methode zu verwenden und die Datei während des Herunterladens zu speichern, wenn Sie beispielsweise mit einer großen Datei arbeiten. Der Hashalgorithmus müsste geändert werden, daher ist er wahrscheinlich nicht relevant, aber hier ist ein Beispiel:

%Vor%

Und wenn die Größe unwichtig ist (und das Hashing auf andere Weise gemacht wird), können Sie Ihren Browser bitten, sie direkt zu speichern:

%Vor%     
quelle

Tags und Links