Windows XP上的Vb6 http post请求

时间:2012-03-30 12:19:22

标签: vb6 msxml

我在使用VB6发送POST请求时遇到问题。 下面的代码在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

其中参数包含字符串“bar = foo& foo = bar”

我已经尝试添加对Microsoft XML,v4.0的引用。

3 个答案:

答案 0 :(得分: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”的引用

现在它有效。

答案 1 :(得分:0)

在这里猜测,但尝试通过在长度上添加10(或100)来更改此行。 改变这一点 xmlhttp.setRequestHeader“Content-Length”,Len(参数) 对此 xmlhttp.setRequestHeader“Content-Length”,Len(参数)+ 10

我从来没有被告知为什么要这样做,只是我应该增加10个或更多。

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