以下代码由Justin Dearing在此发布: url checker VBA, when redirected, show redirected url
然而,我怎么能称这个函数返回T / F和目标呢?我尝试了各种方式(调用,直接请求等)并继续得到编译错误,无效使用对象。
如果我将函数剪切为:Public Function GetResult(strUrl As String)As Boolean
这会返回301或302的T / F,但不会返回目标。
调用此函数以获取isRedirect True / False AND 目标重定向的正确方法是什么?我错过了什么?
任何指针都表示赞赏。乙
Public Function GetResult(ByVal strUrl As String, Optional ByRef isRedirect As Boolean, Optional ByRef target As String) As String
Dim oHttp As New WinHttp.WinHttpRequest
oHttp.Option(WinHttpRequestOption_EnableRedirects) = False
oHttp.Open "HEAD", strUrl, False
oHttp.send
GetResult = oHttp.Status & " " & oHttp.statusText
If oHttp.Status = 301 Or oHttp.Status = 302 Then
isRedirect = True
target = oHttp.getResponseHeader("Location")
Else
isRedirect = False
target = Nothing
End If
End Function
答案 0 :(得分:1)
试试这个,看看是否有效。
Option explicit
Public Function GetResult(ByVal strUrl As String, Optional ByRef isRedirect As Boolean, Optional ByRef target As String) As String
Dim oHttp As WinHttp.WinHttpRequest
Set oHttp = new winhttp.winhttprequest
With ohttp
.Option(WinHttpRequestOption_EnableRedirects) = False
.Open "HEAD", strUrl, False
.send
GetResult = .Status & " " & .statusText
If .Status = 301 Or .Status = 302 Then
isRedirect = True
target = .getResponseHeader("Location")
Else
isRedirect = False
target = vbnullstring
End If
End with
End Function
未经测试并写在手机上,抱歉格式不正确。
请注意,我不使用 Dim ...作为新的语法。相反,我使用 dim 和设置。
希望它有效。让我知道你是怎么过的。
我的理解是你希望函数返回多个值。传递参数ByRef是实现此目的的一种解决方法。另一种方法可能是返回单个分隔的字符串,然后在所选的分隔符上使用split()。或者返回变体。