VBA HTTP GET 请求 - 带冒号的 cookie

标签 vba serverxmlhttp

我试图在 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 值中包含冒号时,使用这些对象中的任何一个都会导致以下错误。
enter image description here
我试过用 Chr(58) 替换冒号, %3A , 并在字符串中双引号无济于事。我还尝试添加具有各种字符编码的“Content-Type” header ,但这似乎也不起作用。
任何人都知道我如何使用 Winhttp.WinHttpRequest 发送包含冒号的 cookie 值。 , MSXML2.ServerXMLHTTP40 , 或 MSXML2.ServerXMLHTTP60对象?

PS:或者,如果有人知道我如何在使用 MSXML2.ServerXMLHTTP 时获得重定向序列的结束 URL ,那也行! Winhttp.WinHttpRequest将允许我捕获 302 状态代码和 MSXML2.ServerXMLHTTP40MSXML2.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/

相关文章:

excel - 如果范围包含值 > 8 的单元格,则 MsgBox

asp-classic - 在经典asp中将utf-8转换为iso-8859-1

vbscript - 同一服务器,获取 url : vbscript msxml3. dll 80004005 未指定错误,或 msxml6.dll 错误 '80072ee6' 系统错误:-2147012890

asp-classic - 服务器给我以下错误 msxml3.dll

asp-classic - 如何在 asp classic 中触发异步调用并忽略响应?

excel - 从图表转换为图表对象

xml - 在 VBA 中解析 XML 响应数据

excel - VBA On Error 语句执行时没有错误

excel - VBA检查对象在设置之前是否存在