我试图在 VBA 中发送一个 HTTP GET 请求,其中包括一个包含冒号字符的 cookie,如下所示:
objReq.Open "GET", "http://my.url.com?foo=bar", False
objReq.setRequestHeader "Cookie", "abcd=cookie:containing:colons"
objReq.Send
根据我用于 objReq
的对象类型,请求的处理方式有所不同。以下对象类型有效:
Dim objReq As MSXML2.ServerXMLHTTP
Set objReq = New MSXML2.ServerXMLHTTP
不幸的是,我需要使用不同的对象类型(因为 MSXML2.ServerXMLHTTP
无法捕获有关 HTTP 重定向的足够详细信息)。从我读过的内容来看,我需要使用 Winhttp.WinHttpRequest
、 MSXML2.ServerXMLHTTP40
或 MSXML2.ServerXMLHTTP60
,但是在 cookie 值中包含冒号时,使用这些对象中的任何一个都会导致以下错误。我尝试用
Chr(58)
、 %3A
和字符串中的双引号替换冒号,但无济于事。我还尝试添加具有各种字符编码的“Content-Type” header ,但这似乎也不起作用。任何人都知道如何使用
Winhttp.WinHttpRequest
、 MSXML2.ServerXMLHTTP40
或 MSXML2.ServerXMLHTTP60
对象发送包含冒号的 cookie 值?PS:或者,如果有人知道在使用
MSXML2.ServerXMLHTTP
时如何获取重定向序列的结束 URL,那也可以! Winhttp.WinHttpRequest
将允许我捕获 302 状态代码,而 MSXML2.ServerXMLHTTP40
或 MSXML2.ServerXMLHTTP60
将允许我使用 GetOption(-1)
,但 MSXML2.ServerXMLHTTP
不支持这两种方法(据我所知)。 最佳答案
我对 WinHttpRequest 进行了一些测试,并得出了以下代码:
Dim objReq As WinHttp.WinHttpRequest
Set objReq = New WinHttp.WinHttpRequest
objReq.Option(WinHttpRequestOption_EnableRedirects) = True
objReq.Open "GET", "http://www.example.com", False
objReq.setRequestHeader "Cookie", "abcd=cookie:containing:colons"
objReq.send
我确实注意到当我忘记在 url 中包含“http://”时,我收到了与您发布的相同的错误。
我希望这有帮助!
关于VBA HTTP GET 请求 - 带冒号的 cookie,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17377125/