You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:20:33