如何处理 XMLHTTPrequest 中未解析的服务器地址?

How to handle server address not resolved in XMLHTTP request?

我使用以下代码检查 RSS url 是否在 5 秒内响应,以便我可以使用 RSS 提要但是尝试打开 URL 时会导致错误 无法解析目标 URL。我还需要 waitForResponse 来处理这种情况吗?

    Set http = Server.CreateObject("MSXML2.ServerXMLHTTP")
    http.open "POST", "https://persiadigest.com/fa/rss/8", True
    http.send
    
    If http.waitForResponse(5) Then
        body=http.responsetext
    Else
        response.write "Target url is not responding"
    End If
    Set http = Nothing

错误详情:

msxml3.dll error '80072ee7' The server name or address could not be resolved

试试这个例子并告诉我结果:

Option Explicit
Dim Title : Title = "Get RSS FEED"
Dim ArrURL : ArrURL = Array("https://persiadigest.com/fa/rss/8","http://khabarfoori.com/rss/mm")
Dim URL 
For Each URL in ArrURL
    If CheckURL(URL) = "200"  Then 
        MsgBox chr(34) & URL & chr(34) & " ==> is active"& vbCrLF &_
        "Status : " & CheckURL(URL),vbInformation,Title 
        MsgBox GetDataFromURL(URL,"GET",""),vbInformation,Title
    Else 
        MsgBox chr(34) & URL & chr(34) & " ==> is inactive" & vbCrLF &_
        "Status : " & CheckURL(URL),vbCritical,Title 
    End if
Next
'---------------------------------------------------------------------------
Function GetDataFromURL(strURL, strMethod, strPostData)
    Dim lngTimeout
    Dim strUserAgentString
    Dim intSslErrorIgnoreFlags
    Dim blnEnableRedirects
    Dim blnEnableHttpsToHttpRedirects
    Dim strHostOverride
    Dim strLogin
    Dim strPassword
    Dim strResponseText
    Dim objWinHttp
    lngTimeout = 59000
    strUserAgentString = "http_requester/0.1"
    intSslErrorIgnoreFlags = 13056 ' 13056: ignore all err, 0: accept no err
    blnEnableRedirects = True
    blnEnableHttpsToHttpRedirects = True
    strHostOverride = ""
    strLogin = ""
    strPassword = ""
    Set objWinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
    objWinHttp.SetTimeouts lngTimeout, lngTimeout, lngTimeout, lngTimeout
    objWinHttp.Open strMethod, strURL
    If strMethod = "POST" Then
        objWinHttp.setRequestHeader "Content-type", _
        "application/x-www-form-urlencoded"
    End If
    If strHostOverride <> "" Then
        objWinHttp.SetRequestHeader "Host", strHostOverride
    End If
    objWinHttp.Option(0) = strUserAgentString
    objWinHttp.Option(4) = intSslErrorIgnoreFlags
    objWinHttp.Option(6) = blnEnableRedirects
    objWinHttp.Option(12) = blnEnableHttpsToHttpRedirects
    If (strLogin <> "") And (strPassword <> "") Then
        objWinHttp.SetCredentials strLogin, strPassword, 0
    End If
    On Error Resume Next
    objWinHttp.Send(strPostData)
    If Err.Number = 0 Then
        If objWinHttp.Status = "200" Then
            GetDataFromURL = objWinHttp.ResponseText
        Else
            GetDataFromURL = "HTTP " & objWinHttp.Status & " " & _
            objWinHttp.StatusText
        End If
    Else
        GetDataFromURL = "Error " & Err.Number & " " & Err.Source & " " & _
        Err.Description
    End If
    On Error GoTo 0
    Set objWinHttp = Nothing
End Function 
'---------------------------------------------------------------------------
Function CheckURL(vURL)
    On Error Resume Next
    Dim xhr
    Set xhr = CreateObject("MSXML2.ServerXMLHTTP.3.0")
    xhr.Open "HEAD", vURL, false
    xhr.Send
    If Err.Number = 0 Then
        'MsgBox xhr.status
        CheckURL = xhr.status
    Else
        CheckURL = Err.Description
    End If
End Function
'---------------------------------------------------------------------------

一个忽略错误的简单函数就可以了。

Function WaitIgnoreError(ByRef requestObject, timeout)
    On Error Resume Next
    WaitIgnoreError  = requestObject.WaitForResponse(timeout)
End Function

用法:

If WaitIgnoreError(http, 5) Then
    body = http.responsetext
Else
    response.write "Target url is not responding"
End If