如何区分合法的URL重定向与ISP重定向或其他劫持

时间:2015-04-26 20:11:05

标签: vba url redirect

我正在尝试使用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。

1 个答案:

答案 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重定向域以外的域,则我将其解释为合法重定向。