2012-03-30 2 views
3

У меня есть проблема с отправкой запроса POST с VB6. Код ниже работает правильно в Windows7, но в Windows XP он запускается без какой-либо ошибки времени выполнения и отправляет пакет, но похоже, что он не добавляет данные сообщения в пакет. Мой код выглядит так:Vb6 http post request on 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 содержит строку "бар = Foo Foo & = бар"

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

+0

Пропустить заголовок 'Content-Length', он будет автоматически рассмотрен. – wqw

ответ

2

Я нашел решение. Я изменил код таким образом:

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

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

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

0

Вы пытались поставить скобки вокруг параметра отправки, как это?

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, и, таким образом, компилятор понимает, что вы не отправляете указатель и выбираете правильную перегрузку функции отправки.

+0

Еще лучше 'xmlhttp.Send CVar (parameters)' особенно если параметры являются массивами байтов. – wqw