如何在Internet上获取文件版本但不下载?

时间:2009-08-10 05:53:50

标签: windows web-services http-headers metadata

我收到了一个文件网址,例如http://cidian.youdao.com/download/YoudaoDict.exe

我怎样才能获得它的版本而不是下载它?

nots 1:如果您先在计算机上下载文件,有很多方法可以获得它

例如,

版本,您可以使用窗口工具“filever.exe”来获取版本。

但我想不下载它,至少不下载全部。我可以做什么?等你的

帮助!谢谢。

nots 2:我尝试过获取文件的一部分来获取版本的方法:

首先,我使用下载工具“wget.exe”下载文件的一部分(wget.exe是

单线程下载工具,它可以确保从头部下载)

第二,我使用“filever.exe”来获取文件版本。

通过这种方式,一些软件我可以得到它的版本,但有些不能(它们必须都是

已下载。)我不知道为什么。

5 个答案:

答案 0 :(得分:4)

我注意到那个特定的exe链接支持字节范围请求。

$ curl -I http://cidian.youdao.com/download/YoudaoDict.exe
HTTP/1.1 200 OK
...
Accept-Ranges: bytes
Content-Length: 4820792
...
Content-Type: application/octet-stream

您可以发出一个或多个HTTP字节范围请求,以获取确定版本所需的文件部分。你只是要做几个请求来获取你在硬盘上看到的文件部分。

例如,根据HTTP/1.1 spec,您可以使用此请求标头请求前500个字节:

curl -H"Range: bytes=0-499" http://... -o bytes-0-499.dat

答案 1 :(得分:3)

版本号(如果有)嵌入在.exe文件中。您必须至少下载文件的一部分才能检索这些元数据。

查看.exe file format spec

答案 2 :(得分:3)

您可以执行HTTP HEAD请求,服务器可以在Content-Length中报告项目的大小。它还可以报告Last-Modified header下的版本。此外,ETag可能出于同样的目的。

您可以使用netcat测试:

> nc cidian.youdao.com 80
HEAD /download/YoudaoDict.exe HTTP/1.1
Host: cidian.youdao.com

HTTP/1.1 200 OK
Date: Mon, 10 Aug 2009 06:11:59 GMT
Server: Apache
ETag: "Dcm1w6Vxg51"
Last-Modified: Sat, 08 Aug 2009 02:18:40 GMT
Accept-Ranges: bytes
Content-Length: 4820792
X-Request-Received: t=1249884719506801
X-Request-Processing-Time: D=906244
Content-Type: application/octet-stream

如您所见,在您的示例中,给出了所有三个标头,因此您可以根据该信息猜测版本更改。我总是检查确保Date和Last-Modified不一样,因为有时候后者被设置为前者用于脚本生成的页面。

答案 3 :(得分:1)

理论上这是HTTP HEAD request设计的任务,但是iirc默认情况下你得到的唯一相关信息(如果请求当然是全部处理的)将是Content-Length和最后修改。编辑:和ETag

这可能会让您了解您需要了解的内容,但如果您真的想拥有版本号,则必须控制Web服务并能够获取该信息并将其附加到响应头。不是很难做到,只有你掌握了服务才能做到。

答案 4 :(得分:1)

如果您的目的是检测新版本何时可用,您可以查看其他人建议的HEAD HTTP请求的响应。

否则,您可以屏幕抓取(download page)并提取最新版本的详细信息。有一个方便的<dl id="downloadSth">标签,其中列出了版本信息,可以设想收获。我不知道这是否可靠;该网站的作者可以在不事先通知的情况下更改此内容。

我会考虑使用BeautifulSoup