有时候我们需要用一个客户端去模拟人的行为去定时通过浏览器刷新或重新访问一个url,以便去执行,获取一些数据,查看一些状态等等。在Linux系统可以用编辑crontab文件设置定定时任务,用curl 这个功能去模拟访问url,但我在window下怎么解决呢?开始我想用批处理命令,后发现不能执行一些window里的程序,后来查到用cscript 这个命令可以在控制台窗口无视窗的情况下显示输出,关键是可以直接执行vbs,而vbs 可以编写一些复杂的代码。在vbs中写了一个死循环,然后用xmlHttp这个组件去访问一个url
提供了很多的方法和属性,其实ajax的就是通过这个组件实现的,让这个组建同步执行,把url返回的字符串打印输出到控制台中,其实url那边是一个apache,访问的外部接口URL是通过curl,这样一圈转的。
'启动命令 cscript test.vbs http://web.internetedu.org.cn/home/umeng/test
'cscript test.vbs http://web.internetedu.org.cn/home/umeng
'解释:cscript 执行脚本会在命令行显示输出,wscript 执行会弹出对话框窗口,
'后面直接是vbs 文件,文件后面是第一个参数
Dim Wshshell,Msg,i,URL
'Set Wshshell = Wscript.CreateObject("Wscript.Shell")
URL = WScript.Arguments(0)
i=1
arrHttp=array("Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP")
On Error Resume Next
'新建一个XMLHTTP组建
For i=0 To 3
Set http=CreateObject(arrHttp(i))
If isObject(http) Then
Exit For
End If
next
If isObject(http)=false Then
wscript.echo "XMLHttpRequest not supported"
Wscript.quit
End if
'u=Inputbox("URL:","输入URL地址")
'msgbox u
'一个死循环
do while true
http.open "POST", URL,FALSE
http.setRequestHeader "Content-Type","application/x-www-form-urlencoded"
'http.onreadystatechange=getref("callback")
http.send "id=1111&name=liangfang"
If http.readyState=4 And http.status=200 Then
wscript.echo http.responseText
Else
wscript.echo "XMLHTTP_CODE:"&http.readyState&" HTTP_CODE:"&http.status
End If
'If Err.Number <> 0 Then
' wscript.echo "ERROR"
'End If
'显示发送次数
'wscript.echo "SEND_COUNT:"&i
i=i+1
'延迟执行 30秒
wscript.Sleep 30*1000
loop
'只有异步的时候才需要,现在是同步所以没有执行
Public Function callback()
If http.readyState=4 And http.status=200 Then
wscript.echo http.responseText
Else
wscript.echo "XMLHTTP_CODE:"&http.readyState&" SHTTP_CODE:"&http.status
End if
End Function