几个可能的原因..
- 你的意思是
oHttp.Open "GET", strUrl, False
代替oHttp.Open "HEAD", strUrl, False
?
- 也许 MSXML2.XMLHTTP30 不可用?您可以将 MSXML2.XMLHTTPX 的实例声明为早期绑定或后期绑定,这可能会影响您要使用的版本与可用的版本(例如http://word.mvps.org/FAQs/InterDev/EarlyvsLateBinding.htm)
例如
Option Explicit
'Dim oHTTPEB As New XMLHTTP30 'For early binding enable reference Microsoft XML, v3.0
Dim oHTTPEB As New XMLHTTP60 'For early binding enable reference Microsoft XML, v6.0
Sub Test()
Dim chk1 As Boolean
Dim chk2 As Boolean
chk1 = CheckHyperlinkLB("http://stackoverflow.com/questions/11647297/xmlhttp-send-request-brings-back-nothing")
chk2 = CheckHyperlinkEB("http://stackoverflow.com/questions/11647297/xmlhttp-send-request-brings-back-nothing")
End Sub
Public Function CheckHyperlinkLB(ByVal strUrl As String) As Boolean
Dim oHTTPLB As Object
'late bound declaration of MSXML2.XMLHTTP30
Set oHTTPLB = CreateObject("Msxml2.XMLHTTP.3.0")
On Error GoTo ErrorHandler
oHTTPLB.Open "GET", strUrl, False
oHTTPLB.send
If Not oHTTPLB.Status = 200 Then CheckHyperlinkLB = False Else CheckHyperlinkLB = True
Set oHTTPLB = Nothing
Exit Function
ErrorHandler:
Set oHTTPLB = Nothing
CheckHyperlinkLB = False
End Function
Public Function CheckHyperlinkEB(ByVal strUrl As String) As Boolean
'early bound declaration of MSXML2.XMLHTTP60
On Error GoTo ErrorHandler
oHTTPEB.Open "GET", strUrl, False
oHTTPEB.send
If Not oHTTPEB.Status = 200 Then CheckHyperlinkEB = False Else CheckHyperlinkEB = True
Set oHTTPEB = Nothing
Exit Function
ErrorHandler:
Set oHTTPEB = Nothing
CheckHyperlinkEB = False
End Function
编辑:
我通过在浏览器中打开来测试 OP 的链接,现在我发现它重定向到登录页面,所以它是我正在测试的不同链接。它可能会失败,因为 oHttp 对象尚未设置为允许重定向。我知道可以使用下面的代码为 WinHttp.WinHttpRequest.5.1 设置重定向。我需要调查这是否也适用于 MSXML2.XMLHTTP30。
Option Explicit
Sub Test()
Dim chk1 As Boolean
chk1 = CheckHyperlink("http://portal.emilfrey.ch/portal/page/portal/toyota/30_after_sales/20_ersatzteile%20und%20zubeh%C3%B6r/10_zubeh%C3%B6r/10_produktbezogene%20informationen/10_aussen/10_felgen/10_asa-pr%C3%BCfberichte/iq/tab1357333/iq%20016660.pdf")
End Sub
Public Function CheckHyperlink(ByVal strUrl As String) As Boolean
Dim GetHeader As String
Const WinHttpRequestOption_EnableRedirects = 6
Dim oHttp As Object
Set oHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
On Error GoTo ErrorHandler
oHttp.Option(WinHttpRequestOption_EnableRedirects) = True
oHttp.Open "HEAD", strUrl, False
oHttp.send
If Not oHttp.Status = 200 Then
CheckHyperlink = False
Else
GetHeader = oHttp.getAllResponseHeaders()
CheckHyperlink = True
End If
Exit Function
ErrorHandler:
CheckHyperlink = False
End Function
编辑2:
MSXML2.XMLHTTP 确实允许重定向(尽管我相信 MSXML2.ServerXMLHTTP 不允许)。允许/禁止重定向取决于重定向是跨域、跨端口等(请参阅此处的详细信息http://msdn.microsoft.com/en-us/library/ms537505(v=vs.85).aspx )
由于重定向到登录页面是跨域的,因此实现了 IE 区域策略。打开 IE/工具/Internet 选项/安全/自定义级别并将“跨域访问数据源”更改为启用
原始 OP 的代码现在将正确重定向。