6

Bei einer Datei auf einem Webserver (z. B. http://foo.com/bar.zip -> nur über HTTP zugänglich) gibt es eine Möglichkeit, die Datumsattribute (z. B. date [erstellt, geändert]) ohne Herunterladen der gesamten Datei zu erhalten Archiv an erster Stelle?Erstellungsdatum der Datei über HTTP

Jetzt lade ich das Archiv herunter und lese die Attribute programmgesteuert. Das Problem ist, dass das Archiv aus Dutzenden von MiB besteht, also scheint es eine Verschwendung von Ressourcen zu sein, das gesamte Ding herunterzuladen und nur ein paar Bytes an Informationen zu lesen.

Ich weiß, dass Bandbreite praktisch frei ist, aber ich mag es auf keinen Fall verschwenderisch.

+0

Wie genau bestimmen Sie das Dateiänderungsdatum? Durch die Analyse der gespeicherten Datei? Oder lesen Sie die HTTP-Header? –

+0

@kork: Im Moment lade ich das Archiv herunter, öffne es (Perls Archive :: Zip) und erhalte die Datumsinformationen auf diese Weise. Ich hatte gehofft, diese Information über HTTP (das Datum der Erstellung des Archivs reicht es aus) vom Dateisystem des Webservers anzufordern. – consq18

Antwort

7

Try Last-Modified von Kopf

+0

Danke Ihorko, ich werde einen Blick darauf werfen und Bericht erstatten. – consq18

+1

Betrachtet man einen Header-Trace, sieht es so aus, als ob alle Informationen, die ich benötige, zur Verfügung gestellt werden. Ich kann nicht glauben, dass ich mich nicht zuerst um die Header gekümmert habe. :) Vielen Dank! – consq18

6

Achten Sie darauf verwenden, um eine HTTP HEAD-Anforderung anstelle einer HTTP-GET-Anforderung lesen nur die HTTP-Header zu lesen. Wenn Sie ein HTTP-GET durchführen, werden Sie dennoch die gesamte Datei herunterladen, auch wenn Sie nur die HTTP-Header überprüfen möchten.

1

Nur der Einfachheit halber ist hier eine Zusammenstellung der vorhandenen (perfekten) Antworten von @ihorko und @ JanThomä, die curl verwenden. Andere Optionen sind natürlich auch verfügbar, aber hier ist eine voll funktionsfähige Antwort.

Verwenden curl mit der -I Option:

-I, --head
(HTTP/FTP/FILE) nur die HTTP-Header-Fetch! HTTP-Server verfügen über den Befehl HEAD, mit dem nur der Header eines Dokuments abgerufen werden kann. Bei Verwendung in einer FTP- oder FILE-Datei zeigt curl nur die Dateigröße und die Zeit für die letzte Änderung an.

Auch die -s Option ist hier schön:

-s, --silent
Stille oder Ruhe-Modus. Fortschrittsanzeige oder Fehlermeldungen nicht anzeigen. Macht Curl stumm. Es gibt immer noch die Daten aus, nach denen Sie fragen, möglicherweise sogar für das Terminal/stdout, wenn Sie es nicht umleiten.

daher so etwas wie dies würde den Trick:

curl -sI http://foo.com/bar.zip | grep 'Last-Modified' | cut -d' ' -f 2-