我得到一个文件的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这个。