我收到了一个文件网址,例如http://cidian.youdao.com/download/YoudaoDict.exe
我怎样才能获得它的版本而不是下载它?
nots 1:如果您先在计算机上下载文件,有很多方法可以获得它
例如,版本,您可以使用窗口工具“filever.exe”来获取版本。
但我想不下载它,至少不下载全部。我可以做什么?等你的
帮助!谢谢。
nots 2:我尝试过获取文件的一部分来获取版本的方法:
首先,我使用下载工具“wget.exe”下载文件的一部分(wget.exe是
单线程下载工具,它可以确保从头部下载)
第二,我使用“filever.exe”来获取文件版本。
通过这种方式,一些软件我可以得到它的版本,但有些不能(它们必须都是
已下载。)我不知道为什么。
答案 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文件中。您必须至少下载文件的一部分才能检索这些元数据。
答案 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。