2010-12-01 16 views
6

Dado un archivo en un servidor web (por ejemplo, http://foo.com/bar.zip -> solo accesible a través de HTTP), ¿hay alguna forma de obtener los atributos de fecha (por ejemplo, fecha [creada, modificada]) sin descargar todo el archivo en primer lugar?Obtener fecha de creación de archivo a través de HTTP

En este momento, descargo el archivo y leo los atributos programáticamente. El problema es que el archivo contiene docenas de MiB, por lo que parece una pérdida de recursos descargar todo y terminar leyendo solo un par de bytes de información.

Me doy cuenta de que el ancho de banda es prácticamente gratuito, pero no me gusta derrochar en ningún caso.

+0

cómo es exactamente lo que determinan las fechas de modificación de archivos? Al analizar el archivo almacenado? ¿O lees los encabezados HTTP? –

+0

@kork: ahora descargo el archivo, lo abro (Perl's Archive :: Zip) y obtengo la información de la fecha de esa manera. Tenía la esperanza de poder solicitar esta información a través de HTTP (la fecha de creación del archivo solo lo hará) desde el sistema de archivos del servidor web. – consq18

Respuesta

7

intenta leer Last-Modified de cabecera

+0

Gracias ihorko, voy a echar un vistazo e informar. – consq18

+1

Al observar un seguimiento de encabezado, parece que se proporciona toda la información que necesito. No puedo creer que no me haya molestado en mirar los encabezados primero. :) ¡Gracias! – consq18

6

Asegúrese de utilizar una solicitud HTTP HEAD en lugar de una solicitud HTTP GET para leer sólo los encabezados HTTP. Si realiza un HTTP GET, sin embargo, descargará todo el archivo, incluso si decide inspeccionar los encabezados HTTP.

1

Solo por el bien de la simplicidad, aquí hay una compilación de las respuestas existentes (perfectas) de @ihorko y @ JanThomä, que usa curl. Otra opción está disponible también, por supuesto, pero aquí hay una respuesta completamente funcional.

Uso rizo con la opción -I:

-I, --head
(HTTP/FTP/ARCHIVO) buscar el HTTP-cabecera única! Los servidores HTTP tienen el comando HEAD que usa para obtener nada más que el encabezado de un documento. Cuando se utiliza en un archivo FTP o ARCHIVO, curl solo muestra el tamaño del archivo y la última modificación.

Además, la opción -s es agradable aquí:

-s, --silent
el modo silencioso o tranquila. No muestre el medidor de progreso o mensajes de error. Hace que Curl se quede mudo. Todavía emitirá los datos que solicite, potencialmente incluso a la terminal/stdout a menos que lo redirija.

Por lo tanto, algo como esto haría el truco:

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