我正在尝试使用VBA测试错误链接和重定向的网址。
我能够使用HTTP请求GET方法获取重定向URL,以获取返回3xx系列的URL。通过VBA使用MSXML2或WinHttp库的状态响应。
当我为某些具有合法(由URL网站预定)重定向的URL尝试此方法时,我在尝试获取Request对象时收到错误。
例如,将此URL输入浏览器时: http://www.teconnectivity.com ...浏览器最终会到达此地址: http://www.te.com/en/home.html
但是,此VBA代码将返回错误-2147012744:“服务器返回无效或无法识别的响应”。在.Send语句中抛出错误。
<td><a href='redirect.php'><?php $_SESSION['WR'] = $row['WorkOrdRef'];echo $row['WorkOrdRef'];?></a></td>
如果带有该网址的HTTP请求返回错误,我的浏览器如何才能到达目的地:http://www.te.com/en/home.html?
我可以使用浏览器的应用程序来获取最终目标网址:
Sub Test()
Debug.Print sGetRedirectURL("http://www.teconnectivity.com/")
End Sub
Private Function sGetRedirectURL(ByVal sURL As String) As String
Dim oRequest As WinHttp.WinHttpRequest
Dim sReturn As String
Set oRequest = New WinHttp.WinHttpRequest
On Error GoTo ErrProc
With oRequest
.Option(WinHttpRequestOption_EnableRedirects) = False
.Open "GET", sURL, False
.Send
If Left$(.Status, 1) = "3" Then
sReturn = .GetResponseHeader("Location")
End If
End With
On Error GoTo 0
ExitProc:
sGetRedirectURL = sReturn
Exit Function
ErrProc:
Debug.Print Err.Number & ": " & Err.Description
Resume ExitProc
End Function
但是,该方法还将返回ISP重定向或其他劫持的URL。
答案 0 :(得分:0)
我最终采用的方法是使用浏览器应用程序尝试导航到不存在的域URL。如果浏览器到达某个URL,那么这意味着它已被ISP或其他不存在的域重定向。
Private Function sGetNXDomainRedirect() As String
'--attempts to return the domain used to redirect non-existant
' domain urls. Used to distinguish legitimate redirects
' from ISP redirects or other hijacks
'--returns "NoRedirect" if the bogus url is not redirected.
Dim sReturn As String
Dim oIEapp As Object
Dim uTest As udtHttpInfo
Const sBOGUS_URL As String = _
"http://wwXYXw.NXDomainToTest"
Set oIEapp = CreateObject("InternetExplorer.Application")
With oIEapp
.Navigate sBOGUS_URL
Do While .Busy
Loop
On Error Resume Next
sReturn = .document.Domain
On Error GoTo 0
.Quit
End With
Set oIEapp = Nothing
If Len(sReturn) = 0 Then sReturn = "NoRedirect"
sGetNXDomainRedirect = sReturn
End Function
Link to complete code on MrExcel.com forum
一旦知道“ISP重定向”站点,就可以使用IE应用程序测试错误链接或合法重定向。如果通过IE应用程序导航返回ISP重定向域以外的域,则我将其解释为合法重定向。