我得到一个文件的URL,例如, http://cidian.youdao.com/download/YoudaoDict.exe
我怎样才能得到它的版本,但不下载呢?
穷人1:如果你先下载到计算机上的文件中,有很多方法可以得到它的
版本,例如,你可以使用窗口工具“filever.exe”拿到的版本。
但我想不能下载它,至少不会下载它,我all.how可以做什么? 等待您的
救命! 谢谢。
穷人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
正如你所看到的,在你的例子情况下,这三个头给出了,这样你就可以猜测基于该版本信息的变化。 我会经常检查,以确保日期和最后修改是不一样的,因为有时后者设定前者由脚本生成的页面。
那么在理论上,这是那种一个任务的HTTP HEAD请求是专为,但IIRC唯一相关的信息你会在默认情况下得到(如果要求在所有课程的处理)将内容长度和最后修改。 编辑:和ETag的 !
这可能让你多,你需要知道什么,但如果你真的想要的版本号为你必须在Web服务的控制,并能够获取和附加信息的响应头。 不是很难做,但只有当你有服务的控制。
如果你的目的是检测当一个新的版本可用,你可以看一个HEAD HTTP请求的响应,其他建议。
否则,你可以屏幕刮的( 下载页面 ),并提取了最新版本的详细信息。 有一个方便的<dl id="downloadSth">
内的版本信息被列出并且可以令人信服地收获标签。 我不知道这是否将是可靠的; 该网站的作者可能,恕不另行通知改变这一点。
我想看看使用BeautifulSoup这一点。