处理来自 WinHttpRequest 的事件

Car*_*Gil 5 vbscript events httpwebrequest

我使用的程序运行 .VBS 脚本

那么,在VBScript中如何处理WinHttpRequest对象的OnResponseFinished事件呢?

Set oHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
oHTTP.Open "GET", "http://www.google.com", True
oHTTP.Send
Run Code Online (Sandbox Code Playgroud)

小智 0

我承认他的答案不是一个很好的答案,但是注册 VBScript 事件的常用方法是使用该GetRef函数来获取对事件处理程序的引用,例如使用一个MSXML2.XMLHTTP对象:

Set oHTTP = CreateObject("MSXML2.XMLHTTP")
oHTTP.Open "GET", "http://www.google.com", True

oHTTP.OnReadyStateChange = GetRef("oHTTP_OnReadyStateChange")

Sub oHTTP_OnReadyStateChange
    ' do something
End sub

oHTTP.Send
Run Code Online (Sandbox Code Playgroud)

问题是,我尝试了你的代码,即

Set oHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
oHTTP.Open "GET", "http://www.google.com", True

oHTTP.OnResponseFinished = GetRef("oHTTP_OnResponseFinished")

Sub oHTTP_OnResponseFinished
    ' do something
End sub

oHTTP.Send
Run Code Online (Sandbox Code Playgroud)

它不起作用,出现错误

对象不支持此属性或方法:“oHTTP.OnResponseFinished”

但这也许可以给你一个起点,或者你可以使用这个MSXML2库来代替?

只需使用处理 COM 事件的其他方式更新此答案- 使用CreateObject函数的第二个参数,它允许您指定将函数连接到对象的函数前缀,例如

Set oHTTP = CreateObject("WinHttp.WinHttpRequest.5.1", "oHTTP_")
oHTTP.Open "GET", "http://www.google.com", True

Sub oHTTP_OnResponseFinished
    ' do something
End sub

oHTTP.Send
Run Code Online (Sandbox Code Playgroud)

不幸的是,这也不起作用 - 一定是IWinHttpRequestEvents接口无法访问