windows XP上的Vb6 http post请求

windows XP上的Vb6 http post请求,vb6,msxml,Vb6,Msxml,我用VB6发送POST请求时遇到问题。 下面的代码在Windows7上正常工作,但在WindowsXP上运行时没有任何运行时错误,它发送数据包,但看起来没有在数据包中附加post数据。 我的代码如下: Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP") xmlhttp.open "POST", url, False xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-u

我用VB6发送POST请求时遇到问题。 下面的代码在Windows7上正常工作,但在WindowsXP上运行时没有任何运行时错误,它发送数据包,但看起来没有在数据包中附加post数据。 我的代码如下:

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的引用。

这里只是猜测,但尝试通过在长度上添加10(或100)来更改此行。 改变这个 xmlhttp.setRequestHeader“内容长度”,Len(参数) 对此 xmlhttp.setRequestHeader“内容长度”,Len(参数)+10


从来没有人告诉我为什么要这样做,只是说我应该在长度上加10或更多。

您是否尝试过在send参数的周围加上括号

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,所以在选择Send方法的正确重载时,ServerXMLHTTP对象变得混乱。它认为您正在发送指向IStream的指针,而实际上您正在尝试发送的是BSTR。通过将参数放在括号中,它使编译器发送变量ByVal而不是ByRef,因此编译器意识到您没有发送指针,并选择发送函数的正确重载。

我找到了一个解决方案。我以这种方式更改了代码:

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服务,版本5.1”的引用


现在它可以工作了。

跳过
内容长度
标题,它将自动处理。更好的是
xmlhttp.Send CVar(parameters)
,尤其是当参数是字节数组时。