【问题标题】:VBA HTTP GET request - cookies with colonsVBA HTTP GET 请求 - 带有冒号的 cookie
【发布时间】:2013-06-29 05:47:48
【问题描述】:

我正在尝试在 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.WinHttpRequestMSXML2.ServerXMLHTTP40MSXML2.ServerXMLHTTP60 对象发送包含冒号的cookie 值吗?



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

【问题讨论】:

    标签: vba serverxmlhttp


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

    我希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-01
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多