4

我正在尝试在 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.WinHttpRequestMSXML2.ServerXMLHTTP40MSXML2.ServerXMLHTTP60,但是在 cookie 值中包含冒号时,使用这些对象中的任何一个都会导致以下错误。

在此处输入图像描述

我尝试用 , 和双引号替换字符串中的冒号Chr(58)无济于事%3A。我还尝试添加具有各种字符编码的“Content-Type”标头,但这似乎也不起作用。

任何人都知道如何使用 、 或 对象发送包含冒号的Winhttp.WinHttpRequestcookieMSXML2.ServerXMLHTTP40MSXML2.ServerXMLHTTP60



PS:或者,如果有人知道我在使用时如何获取重定向序列的结束 URL MSXML2.ServerXMLHTTP,那也可以!Winhttp.WinHttpRequest将允许我捕获 302 状态代码,MSXML2.ServerXMLHTTP40或者MSXML2.ServerXMLHTTP60允许我使用GetOption(-1),但MSXML2.ServerXMLHTTP不支持这些方法中的任何一种(据我所知)。

4

1 回答 1

1

我用 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://”时,我收到了与您发布的相同的错误。

我希望这有帮助!

于 2013-07-11T02:19:26.090 回答