2012-03-30 175 views
3

我在使用VB6發送POST請求時遇到問題。 下面的代碼在Windows7上正常工作,但在Windows XP上運行時沒有任何運行時錯誤,它發送數據包但看起來不會在數據包中追加發布數據。 我的代碼是這樣的:在Windows XP上Vb6 http發佈請求

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 &富=酒吧」

我已經嘗試添加到Microsoft XML,v4.0的引用。

+0

跳過'Content-Length'標題,它會自動處理。 – wqw 2012-03-30 14:07:00

回答

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 

添加引用「微軟的WinHTTP服務,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,因此編譯器意識到你沒有發送指針並選擇Send函數的正確超載。

+0

更好'xmlhttp.Send CVar(參數)'特別是如果參數是字節數組。 – wqw 2012-03-31 09:20:53