vbscript msxml12.XMLHTTP错误处理

Mic*_*ael 2 vbscript xmlhttprequest

我使用以下vbscript代码下载网页:

Dim oXML
Set oXML = CreateObject("msxm12.XMLHTTP")
oXML.Open "GET", "mysite.com", False
oXML.Send
Run Code Online (Sandbox Code Playgroud)

如果没有这样的网站,我会报错 80004005, Unspecified error at line "oXML.Open ..."

我该如何处理vbscript中的此错误?我想捕获此错误,并显示msgbox和我的错误,即网页不可用。

Ekk*_*ner 6

脚本中至少有三个故障点。

  1. CreateObject可能会失败;例如,如果您使用msxml12(数字1)而不是msxml2(字母l)。这种错误应在开发过程中解决。
  2. .Open可能会失败;例如,如果您使用“ mysite.com”而不是语法正确的URL。如果您在运行时获取URL,建议进行“跳转前查看”检查,OERN可以用来捕获验证中未找到的错误URL。
  3. 发送可能失败;例如,如果站点已关闭或被废弃。对于OERN,这是一个明确的案例。

OERN的最重要规则:保持局部且短(仅在OERN和OEG0之间有一条危险线)。

演示代码:

Option Explicit

Dim sUrl
For Each sUrl In Split("http://stackoverflow.com http://pipapo.org mysite.com")
    Dim oXML, aErr
'   Set oXML = CreateObject("msxm12.XMLHTTP")
    Set oXML = CreateObject("msxml2.XMLHTTP.6.0")
   On Error Resume Next
    oXML.Open "GET", sUrl, False
    aErr = Array(Err.Number, Err.Description)
   On Error GoTo 0
    If 0 = aErr(0) Then
      On Error Resume Next
       oXML.Send
       aErr = Array(Err.Number, Err.Description)
      On Error GoTo 0
       Select Case True
         Case 0 <> aErr(0)
           WScript.Echo "send failed:", aErr(0), aErr(1)
         Case 200 = oXML.status
           WScript.Echo sUrl, oXML.status, oXML.statusText
         Case Else
           WScript.Echo "further work needed:"
           WScript.Echo sUrl, oXML.status, oXML.statusText
       End Select
    Else
       WScript.Echo "open failed:", aErr(0), aErr(1)
    End If
Next
Run Code Online (Sandbox Code Playgroud)

输出:

cscript 24863986.vbs
http://stackoverflow.com 200 OK
send failed: -2146697211 The system cannot locate the resource specified.

open failed: -2147012890 System error: -2147012890.
Run Code Online (Sandbox Code Playgroud)