Запрос VBA HTTP GET - файлы cookie с двоеточием

Я пытаюсь отправить запрос HTTP GET в VBA, который включает файл 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» с различными кодировками символов, но это тоже не работает.

Кто-нибудь знает, как я могу отправить значение cookie, содержащее двоеточия, используя объекты Winhttp.WinHttpRequest, MSXML2.ServerXMLHTTP40 или MSXML2.ServerXMLHTTP60?



PS: В качестве альтернативы, если кто-нибудь знает, как я могу получить конечный URL-адрес последовательности перенаправления при использовании MSXML2.ServerXMLHTTP, это тоже сработает! Winhttp.WinHttpRequest позволит мне получить код состояния 302, а MSXML2.ServerXMLHTTP40 или MSXML2.ServerXMLHTTP60 позволит мне использовать GetOption(-1), но MSXML2.ServerXMLHTTP не поддерживает ни один из этих методов (насколько я могу судить).


person wlgreg    schedule 29.06.2013    source источник


Ответы (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

Я заметил, что получил ту же ошибку, что и вы, когда я забыл включить «http://» в URL-адрес.

Надеюсь, это поможет!

person Astrus    schedule 11.07.2013