VBS 中的 HTTP GET 请求

HTTP GET request in VBS

Token = aiudhaiw
Target = 88192823
url = "https://example.com" + Token + Target

Dim o
Set o = CreateObject("MSXML2.XMLHTTP")
o.Open "GET", url, False
o.Send

假设我有这个代码,它可以工作,但只能工作 1 次。我想做的是在下一行更新 TokenTarget 或两者(如果需要),然后再次使用 o.Send 它应该再次发送它,它应该工作对吗?但事实并非如此。

如果我再次尝试使用相同的 TokenTarget,它不起作用。即使我更改它们,并再次更改 url,它也不起作用。

我让它工作的唯一方法是制作新的 o.Open,它也不能再次使用相同的 TokenTarget

对打开的请求调用 Send 两次导致错误 0xC00C0240:

This method cannot be called after the send method has been called.

所以您必须先打开一个新请求,然后才能再次调用 Send

示范:

这个有效:

>>> url = "https://www.example.org/"
>>> Set req = CreateObject("Msxml2.XMLHTTP.6.0")
>>> req.Open "GET", url, False
>>> req.Send
>>> req.Open "GET", url, False
>>> req.Send

这不是:

>>> url = "https://www.example.org/"
>>> Set req = CreateObject("Msxml2.XMLHTTP.6.0")
>>> req.Open "GET", url, False
>>> req.Send
>>> req.Send
This method cannot be called after the send method has been called.
 (0xC00C0240)

此外,要更改 URL 您必须 re-open 请求。无法更改已打开请求的 URL。

>>> url = "https://www.example.org/"
>>> Set req = CreateObject("Msxml2.XMLHTTP.6.0")
>>> req.Open "GET", url, False
>>> req.Send
>>> url = "https://www.example.com/"  'this has no effect on req!
>>> req.Send
This method cannot be called after the send method has been called.
 (0xC00C0240)
>>> req.Open "GET", url, False        'now the request uses the new URL
>>> req.Send

令牌能否re-used完全取决于服务器如何处理请求。如果令牌仅供 one-time 使用,则您不能指望能够成功发送两次相同的请求。