【问题标题】:Get File Creation Date Over HTTP通过 HTTP 获取文件创建日期
【发布时间】:2011-05-18 14:48:08
【问题描述】:

给定网络服务器上的文件(例如,http://foo.com/bar.zip -> 只能通过 HTTP 访问),有没有办法在不下载整个存档的情况下获取日期属性(例如,日期 [创建、修改])地点?

现在,我下载存档并以编程方式读取属性。问题是存档有几十个 MiB,所以下载整个文件并最终只读取几个字节的信息似乎是一种资源浪费。

我知道带宽实际上是免费的,但无论如何我都不喜欢浪费。

【问题讨论】:

  • 您如何确定文件修改日期?通过分析存储的文件?还是您阅读 HTTP 标头?
  • @kork:现在我下载存档,打开它(Perl's Archive::Zip)并以这种方式获取日期信息。我希望能够通过 HTTP(仅存档创建日期就可以)从网络服务器的文件系统请求此信息。

标签: http language-agnostic attributes download file-attributes


【解决方案1】:

为了简单起见,这里是来自@ihorko 和@JanThomä 的现有(完美)答案的汇编,它们使用 curl。当然,也可以使用其他选项,但这里有一个功能齐全的答案。

将 curl 与 -I 选项一起使用:

-I, --head
(HTTP/FTP/FILE) 仅获取 HTTP 标头! HTTP 服务器具有 HEAD 命令,它用于获取文档标题以外的任何内容。在 FTP 或 FILE 文件上使用时,curl 仅显示文件大小和上次修改时间。

另外,-s 选项在这里也不错:

-s, --silent
静音或静音模式。不要显示进度表或错误消息。使 Curl 静音。它仍然会输出你要求的数据,甚至可能输出到终端/标准输出,除非你重定向它。

因此,这样的事情可以解决问题:

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

【讨论】:

  • 感谢这个实用的答案。我会在 grep 命令中添加 -i (不区分大小写) 选项。同样在 grep 的 windows 版本中,单引号似乎是按字面意思解释的,最好使用双引号,或者因为没有空格而没有引号。我用过:curl -sI <file-address> | grep -i "Last-Modified"
【解决方案2】:

确保使用 HTTP HEAD 请求而不是 HTTP GET 请求来仅读取 HTTP 标头。如果您执行 HTTP GET,您将下载整个文件,即使您决定只检查 HTTP 标头。

【讨论】:

    【解决方案3】:

    尝试从标题中读取Last-Modified

    【讨论】:

    • 谢谢 ihorko,我会看看并报告。
    • 查看标题跟踪,似乎提供了我需要的所有信息。我不敢相信我没有先看标题。 :) 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 2011-05-23
    • 2011-10-16
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    相关资源
    最近更新 更多