找回密码
 加入
搜索
查看: 3923|回复: 6

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

  [复制链接]
发表于 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了)
发表于 2013-2-15 11:14:51 | 显示全部楼层
除了遍列所有可能的版本号还真想不出其它办法
发表于 2013-2-15 12:03:52 | 显示全部楼层
本帖最后由 nangua111111 于 2013-2-15 12:17 编辑

检测自己下载文件,通过比较可以吗.获取不了原文件,想不出了
发表于 2013-2-16 10:42:39 | 显示全部楼层
1310到2000也就700次,每次试一千次就行了,在原来的版本号加1000
发表于 2013-3-2 17:35:35 | 显示全部楼层
可以通过文件大小和创建时间叛断更新吧,思路应是这样
发表于 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[2] + 1 To 9
        $sFileName = $sPartFileName & '-' & $aVer[0] & '-' & $aVer[1] & '-' & $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] + 1 To 9
                For $j = 0 To 9
                        $sFileName = $sPartFileName & '-' & $aVer[0] & '-' & $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[0] + 1 To $aVer[0] + 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

发表于 2013-3-2 23:05:20 | 显示全部楼层
用程序登录QQ群,获取QQ群窗口的文本,再判断有无新的版本,这样不可以吗?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 01:15 , Processed in 0.111377 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表