Excel宏获取链接重定向

时间:2016-12-30 08:39:27

标签: excel excel-vba vba

是否可以创建一个宏来检查来自单元格A1的重定向链接:A10?

例如:在单元格A1上,我有链接" www.pplware.com"但是当我们打开链接www.pplware.com时,我们会重定向到另一个网站" https://ppware.sapo.pt"

是否可以将重定向链接写入单元格B1:B10? B1:https://ppware.com.sapo.pt

1 个答案:

答案 0 :(得分:0)

只要使用HTTP(301永久移动)完成重定向,我们就可以使用WinHttpRequest object进行测试。注意:XMLHTTP是不可能的,因为这不允许禁用跟随重定向。

WinHttpRequest对象有一个属性Option,它是一个枚举WinHttpRequestOption enumeration,其中6.项为WinHttpRequestOption_EnableRedirects。这是默认设置的True,因此WinHttpRequest将立即跟随重定向。但是我们可以设置它False,因此在遵循重定向之前获取响应头。由此我们可以获得Location:,即重定向所在的URL

示例:

enter image description here

Public Function testRedirect(oCell As Range) As String

 testRedirect = "not redirected"

 strURL = oCell.Hyperlinks(1).Address

 WinHttpRequestOption_EnableRedirects = 6

 Set oWinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
 oWinHttp.Option(WinHttpRequestOption_EnableRedirects) = False

 oWinHttp.Open "HEAD", strURL, False
 oWinHttp.send ""

 If oWinHttp.Status = 301 Then
  strResponseHeaders = oWinHttp.getAllResponseHeaders()
  For Each strResponseHeader In Split(strResponseHeaders, Chr(10))
   If Left(strResponseHeader, 9) = "Location:" Then
    testRedirect = "redirected to " & strResponseHeader
   End If
  Next
 End If

End Function