runsnake 发表于 2013-2-15 09:17:09

如何检测某网络上的文件是否存在?

是这样的,一软件作者不定期在QQ群上公布软件升级版,并且会给出下载链接。
而这个下载链接的格式是固定的,如这一次发布的链接:
http://files.webname.com/dir/soft1.2.1.3.zip
下一次发布的链接可能就是:
http://files.webname.com/dir/soft1.2.2.8.zip
也就是每次发布只有版本号发生变化,而别的都不变的。
没有网页可以浏览这些下载文件列表,如直接访问:http://files.webname.com/dir/
会提示错误:不可访问
=================================================

我的想法就是写个脚本每天去检测一次有没有新版本发布
也就是我怎么能得到新版本发布的链接?

这个软件版本号有时也是不连续的,如果有重大升级,可能从1.2.1.1直接升到1.3.1.0,甚至直接到2.0.0.0
但有两个规律:一是新版本号肯定比正在用的版号大;二则就是一定是四段式的

请教一下,这样的要求有什么方法可以方便达到?
当然,检测我正在用的这个软件本版本我会。
最好是能快速检测出来(我只需要检测,并不需要真的下载,因为软件比较大,50M以上),别要花太长时间。
次好就是别给服务器在短时间造成大量多次连接,如几秒钟内连服上成千上万次这样的(因为这样我猜可能被服务器封我的ip了)

whitehead 发表于 2013-2-15 11:14:51

除了遍列所有可能的版本号还真想不出其它办法

nangua111111 发表于 2013-2-15 12:03:52

本帖最后由 nangua111111 于 2013-2-15 12:17 编辑

检测自己下载文件,通过比较可以吗.获取不了原文件,{:face (356):}想不出了

ebhb 发表于 2013-2-16 10:42:39

1310到2000也就700次,每次试一千次就行了,在原来的版本号加1000

ningzhonghui 发表于 2013-3-2 17:35:35

可以通过文件大小和创建时间叛断更新吧,思路应是这样

happytc 发表于 2013-3-2 21:25:58

回复 1# runsnake

这种基本只有循环解决了。能采取的技巧不多

#include <WinHttp.au3>
Local $sVer, $aVer, $sFileName, $sPartFileName, $iFlag = 0
$sVer = '2-0-3'
$sPartFileName = 'SirenOfShame'
$aVer = StringSplit($sVer, '-', 2)

For $i = $aVer + 1 To 9
        $sFileName = $sPartFileName & '-' & $aVer & '-' & $aVer & '-' & $i & '.msi'
        If CheckNetFile($sFileName) Then
                $iFlag = 1
                ExitLoop
        EndIf
Next

If $iFlag Then
        MsgBox(0, 'Info', 'New Ver: ' & $sFileName)
        Exit
Else
        For $i = $aVer + 1 To 9
                For $j = 0 To 9
                        $sFileName = $sPartFileName & '-' & $aVer & '-' & $i & '-' & $j & '.msi'
                        If CheckNetFile($sFileName) Then
                                $iFlag = 1
                                ExitLoop 2
                        EndIf
                Next
        Next
EndIf

If $iFlag Then
        MsgBox(0, 'Info', 'New Ver: ' & $sFileName)
        Exit
Else
        For $i = $aVer + 1 To $aVer + 1
                For $j = 0 To 9
                        For $k = 0 To 9
                                $sFileName = $sPartFileName & '-' & $i & '-' & $j & '-' & $k & '.msi'
                                If CheckNetFile($sFileName) Then
                                        $iFlag = 1
                                        ExitLoop 2
                                EndIf
                        Next
                Next
        Next
EndIf

If $iFlag Then
        MsgBox(0, 'Info', 'New Ver: ' & $sFileName)
Else
        MsgBox(0, 'Info', 'No new Version')
EndIf

Func CheckNetFile($sFileName)
        ConsoleWrite($sFileName & @CRLF)
        Local $hOpen, $hConnect, $hRequest, $sHeader, $iFlag
        $hOpen = _WinHttpOpen()
        $hConnect = _WinHttpConnect($hOpen, "siren-of-shame.googlecode.com")
        $hRequest = _WinHttpOpenRequest($hConnect, Default, "files/" & $sFileName)
        _WinHttpSendRequest($hRequest)
        _WinHttpReceiveResponse($hRequest)
        $sHeader = _WinHttpQueryHeaders($hRequest)
        _WinHttpCloseHandle($hRequest)
        _WinHttpCloseHandle($hConnect)
        _WinHttpCloseHandle($hOpen)
        $iFlag = StringRegExp($sHeader, "(?i)Last-Modified.*\nExpires")
        Return $iFlag
EndFunc

shqf 发表于 2013-3-2 23:05:20

用程序登录QQ群,获取QQ群窗口的文本,再判断有无新的版本,这样不可以吗?
页: [1]
查看完整版本: 如何检测某网络上的文件是否存在?