2012-03-30 43 views
3

VB6でPOST要求を送信する際に問題があります。 以下のコードはWindows7では正常に動作しますが、Windows XPではランタイムエラーなしで実行され、パケットを送信しますが、パケットにポストデータを追加しないように見えます。 私のコードは次のようである:Windows XPでのVb6 httpポストリクエスト

PARAMATERSが文字列私はすでに、MicrosoftのXML、V4.0への参照を追加しようとしました

"バー= FOO FOO & =バー" が含まれてい

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 

+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 

は、「マイクロソフトのWinHTTPサービス、バージョン5.1」

そして今、それが動作への参照を追加します。

0

ちょうどここで推測しますが、長さに10(または100)を追加してこの行を変更してみてください。この xmlhttp.setRequestHeader "のContent-Length"、レン(パラメータ)この xmlhttp.setRequestHeader "のContent-Length" へ 、レン(パラメータ)を変更 + 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) 

は何が起こっていると思うと、あなたはServerXMLHTTPオブジェクトのByRefパラメータを送信しているので、Sendメソッドの正しいオーバーロードを選ぶ際に混乱してきているということです。実際に送信しようとしているときにIStreamへのポインタを送信していると思うのは、BSTRです。パラメータを角括弧で囲むことにより、コンパイラはByRefの代わりにByVal変数を送信します。したがって、コンパイラはポインタを送信していないことを認識し、Send関数の正しいオーバーロードを選択します。

+0

特にパラメータがバイト配列の場合は、 'xmlhttp.Send CVar(parameters)'をさらに良くします。 – wqw