Alexander (HH): Mit Wget _nur_ die herunterzuladene Größe aller Dateien prüfen

Beitrag lesen

Moin Moin!

Was genau möchtest Du also wissen?

Die Größe aller Resourcen, die ein rekursiver wget-Aufruf auf Deine Festplatte schaufelt? Beliebig groß. Man kann serverseitig dafür sorgen, dass ein Inhalt unter einer beliebigen Anzahl von URLs ausgeliefert wird, ohne dass der Client das erkennen kann.

Ja, genau das. Die Größe mag zwar in der Theorie beliebig groß sein, ich weiß aber, dass sich die Größe der Dateien nicht ändern wird.

Im HTTP-Kontext gibt es keine Dateien, nur Resourcen. Daher ist die Frage nach Dateigrößen technisch unsinnig. Wenn Du natürlich WEISST, dass alle Resourcen auf dem HTTP-Server einer Datei entsprechen, können wir mal darüber hinwegsehen.

Es hilft nur ein vollständiger Download. Du kannst einige Abkürzungen nehmen, wenn Du bestimmte Annahmen machen darfst. Für den allgemeinen Fall gelten diese Annahmen NICHT. Daher wird es kein fertiges Programm geben.

Einige MÖGLICHE Annahmen für einen Apache "out of the box" (NICHT die umkonfigurierten, distributionsspezifischen Varianten) ohne zusätzliche, serverseitige Software:
* Resourcen, die auf .jpg, .gif, .png, .js, .css, .txt, .mpg, .avi enden (von Query-Parametern mal abgesehen), ignorieren alle URL-Parameter, d.h. unabhängig von URL-Parametern wird immer die selbe Resource ausgeliefert
* Resourcen, die auf .jpg, .gif, .png, .js, .css, .txt, .mpg, .avi enden, enthalten keine weiteren Links, ihr Inhalt muß also nicht heruntergeladen werden
* Resourcen, die auf .jpg, .gif, .png, .js, .css, .txt, .mpg, .avi enden, können also mit einem HEAD-Request angefordert werden, um ihre Größe zu ermitteln
* Die gleichen drei Annahmen gelten für alle per <img src="...">, <embed src="...">, <object src="...">, <sript src="...">, <link rel="stylesheet" src="..."> eingebundenen Resourcen.
* Keine der Resourcen außer Verzeichnislisten, deren URL mit einem Slash endet, wird durch serverseitige Software generiert (sprich: Keine CGIs, kein PHP, kein JSP/ASP/whatever)
* Die Größe von Verzeichnislisten ist Null, da hinter den Resourcen keine Datei liegt.
* Resourcen, die auf .exe, .dll, .asp, .jsp, .php, .cgi enden (wiederum Query-Parameter ignorierend), brechen diese Annahmen und sorgen für einen Programmabbruch ohne Aussage über Größen.

Mit den Annahmen kannst Du mit relativ wenig Datentransfer die Größe der meisten Dateien hinter dem HTTP-Server ermitteln, in dem Du nur die Resourcen per GET herunterlädst, die Links enthalten können, und von den anderen Resourcen die Größe per HEAD ermittelst.

Mit Perl und LWP::Simple dürfte der Aufwand bei etwa 50 bis 100 Zeilen liegen.

Der Einzeiler aus meinem ersten Posting in diesem Thread funktioniert unter diesen Annahmen natürlich auch, schneller und mit wesentlich weniger Transfervolumen.

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".