我怎样才能得到在互联网上的文件版本,但不下载?

我得到一个文件的URL,例如, http://cidian.youdao.com/download/YoudaoDict.exe

我怎样才能得到它的版本,但不下载它?

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

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

但我不想下载它,至less不能下载,我可以做什么? 等待你的

帮帮我! 谢谢。

nots 2:我已经试过了让文件的一部分获取版本的方法:

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

一个单线程下载工具,它可以确保下载表头)

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

这样,一些软件我可以得到它的版本,但有些不能(他们必须都是

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

我注意到,特定的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规范 ,您可以使用此请求标头请求前500个字节:

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

版本号(如果有)嵌入.exe文件本身。 您将不得不下载至少一部分文件以检索这些元数据。

查看.exe文件格式规范 。

您可以执行HTTP HEAD请求,服务器可以在Content-Length中报告项目的大小。 它也可能会报告Last-Modified标题下的一个版本。 此外, 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不一样,因为有时后者被设置为由脚本生成的页面的前者。

理论上讲,这是HTTP HEAD请求所设计的任务,但是iirc默认只有相关的信息(如果请求被处理的话)将是Content-Length和Last-Modified。 编辑:和ETag !

这可能会让你了解你需要知道的大部分内容,但是如果你真的想要版本号,那么你必须控制Web服务,并能够获取这些信息并将其附加到响应头文件中。 没有这么难做,但只有当你有控制的服务。

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

否则,你可以屏幕上的( 下载页面 )提取最新版本的细节。 有一个方便的<dl id="downloadSth">标签,其中版本信息被列出并且可以被收获。 我不知道这是否可靠; 该网站的作者可以改变这一点,恕不另行通知

我会考虑使用BeautifulSoup这个。