VB脚本检测网络连接异常求助:Http.Status始终返回200
排查VB脚本网络检测始终返回200的问题
首先看你的代码,有几个关键问题可能导致不管网络状态如何都返回200,我来帮你拆解并修正:
- 异步请求未等待完成:你用了
Http.Open "GET", "http://www.google.com/", True,第三个参数True表示异步请求,但你在Http.Send之后立刻判断Http.Status——这时候请求大概率还没完成,拿到的可能是对象初始状态值,或是之前缓存的成功结果。 - 默认缓存干扰:
MSXML2.ServerXMLHTTP默认会缓存请求结果,如果之前成功访问过Google,就算现在断网,也可能直接返回缓存的200状态。 - 未捕获连接错误:当完全断网时,请求根本发不出去,这时候不会返回状态码,而是直接抛出错误,你的代码没处理这种情况。
给你修正后的代码,解决这些问题:
Dim T = 0 While(T = 0) Set Http = WScript.CreateObject("MSXML2.ServerXMLHTTP.6.0") ' 指定稳定的组件版本 Http.SetOption 2, 13056 ' 禁用缓存,避免旧结果干扰 Http.Open "GET", "http://www.google.com/", False ' 改用同步请求,确保请求完成再判断 On Error Resume Next ' 捕获连接失败的错误 Http.Send If Err.Number <> 0 Then MsgBox "Network Connection isn't established yet" ElseIf Http.Status = 200 Then MsgBox "Network Connection is established" T = 1 Else MsgBox "Network Connection isn't established yet (Status: " & Http.Status & ")" End If On Error Goto 0 ' 恢复默认错误处理 WScript.Sleep 2000 ' 添加延迟,避免循环执行太频繁 Wend
关键修改说明:
- 指定
MSXML2.ServerXMLHTTP.6.0版本:避免不同系统组件版本差异导致的兼容性问题。 - 禁用缓存:通过
SetOption 2, 13056强制不使用缓存,确保每次都是实时请求结果。 - 改用同步请求:第三个参数设为
False,让Send方法阻塞到请求完成,再获取真实的状态码。 - 错误捕获:当断网或无法连接时,
Send会抛出错误,通过Err.Number可以直接判定网络未连通,比单纯判断状态码更准确。 - 添加延迟:避免循环高频执行,减少系统资源占用。
另外,你也可以考虑替换检测目标为国内可稳定访问的地址(比如http://www.baidu.com),避免Google在部分地区访问受限带来的干扰。
内容的提问来源于stack exchange,提问作者user9684191
相关产品推荐
相关产品推荐

