2013-06-29 5 views
4

Я пытаюсь отправить запрос HTTP GET в VBA, который включает в себя печенье, содержащее двоеточие, например так:VBA HTTP GET запрос - печенье с двоеточием

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 перенаправления). Из того, что я прочитал, мне нужно использовать , MSXML2.ServerXMLHTTP40 или MSXML2.ServerXMLHTTP60, но при использовании любого из этих объектов возникает следующая ошибка при включении двоеточий в значение cookie.

enter image description here

Я попытался заменить двоеточие с 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 не поддерживает ни один из этих методов (из того, что я могу сказать).

ответ

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.

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