我在使用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的引用。
答案 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函数重载。