Vb6 http пост-запрос на Windows XP - PullRequest
3 голосов
/ 30 марта 2012

У меня проблема с отправкой POST-запроса с VB6.Приведенный ниже код работает правильно в Windows7, но в Windows XP он работает без каких-либо ошибок во время выполнения и отправляет пакет, но выглядит так, как будто он не добавляет данные поста в пакет.Мой код выглядит так:

Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")
xmlhttp.open "POST", url, False
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xmlhttp.setRequestHeader "Content-Length", Len(parameters)
xmlhttp.Send parameters

, где paramaters содержит строку "bar = foo & foo = bar"

Я уже пытался добавить ссылки на Microsoft XML, v4.0.

Ответы [ 3 ]

2 голосов
/ 03 апреля 2012

Я нашел решение. Я изменил код следующим образом:

Dim xmlhttp As WinHttp.WinHttpRequest 
...

Set xmlhttp = New WinHttp.WinHttpRequest

xmlhttp.open "POST", url, False
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xmlhttp.setRequestHeader "Content-Length", Len(parameters)
xmlhttp.Send parameters

Добавление ссылки на «Microsoft WinHTTP Services, версия 5.1»

И теперь это работает.

0 голосов
/ 30 марта 2012

Вы пытались заключить квадратные скобки вокруг параметра отправки следующим образом?

Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP") xmlhttp.open "POST", url, False      
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
xmlhttp.setRequestHeader "Content-Length", Len(parameters) 
xmlhttp.Send (parameters)

Я думаю, что происходит потому, что, поскольку вы отправляете параметр ByRef, объект ServerXMLHTTP запутывается при выборе правильной перегрузкиметод отправки.Он думает, что вы отправляете указатель на IStream, когда на самом деле вы пытаетесь отправить это BSTR.Помещая параметр в скобки, он заставляет компилятор отправлять переменную ByVal вместо ByRef, и, таким образом, компилятор понимает, что вы не отправляете указатель, и выбирает правильную перегрузку функции Send.

0 голосов
/ 30 марта 2012

Просто угадайте здесь, но попробуйте изменить эту строку, добавив 10 (или 100) к длине.измените этот xmlhttp.setRequestHeader "Content-Length", Len (параметры) на этот xmlhttp.setRequestHeader "Content-Length", Len (параметры) + 10

Мне никогда не говорили, почему я должен это делать, просточто я должен добавить 10 или больше к длине.

...