はじめて質問させていただきます。
VB6.0でXMLHTTPを使ってWebサーバにXML文書を送信しようと考えています。
以下のようなコードを作成しました。
--------------------------------------------------------------------
Dim oHTTP As Object
Dim strURL As String
Dim doc As New MSXML2.DOMDocument
strURL="https://xxxxxxx/xxx.cgi"
set oHTTP=CreateObject("MSXML2.XMLHTTP")
Call doc.Load("C:\...\test.xml")
oHTTP.open "POST",strURL,False
oHTTP.setReqestHeader "Content-Type","text/xml"
oHTTP.send doc
---------------------------------------------------------------------
このsend部分で、0x80070057"パラメータが間違っています"というエラーが
でてしまいます。
いろいろ試行錯誤したのですが、原因がわからずお手上げ状態です。
なにか根本的に間違えているかもしれませんが、ご教授いただけませんでしょうか。
docがstrinじゃないからでは?
MSXML2.DOMDocument はアーリーバインドにしているのに、
MSXML2.XMLHTTP をレイトバインドにしているのは何故でしょう?
> oHTTP.setReqestHeader "Content-Type","text/xml"
まず、これが間違っていますね。
oHTTP.setRequestHeader "Content-Type", "text/xml"
に修正してみてください。
> このsend部分で、0x80070057"パラメータが間違っています"というエラーが
> でてしまいます。
データ型の指定が間違っているからです。
sendの引数には、Variant型を指定してください。
正確にいえば、
・内部形式 String の Variant型
・内部形式 Byte配列 の Variant型
・IStream を実装したオブジェクト を持つ Variant型
のいずれかしか渡せません。
XMLHTTPをアーリーバインドしている時には、暗黙の型変換が行われるので
oHTTP.send doc
でも動作しますが、今回のような宣言にしているときには、
oHTTP.send CVar(doc)
のように、明示的に型変換を行うか、もしくは渡す引数を
Dim doc As Variant
のように宣言しておく必要があります。
あんさん、魔界の仮面弁士さん、お返事ありがとうございます。
書き込みが遅くなり申し訳ありません。
>まず、これが間違っていますね。
> oHTTP.setRequestHeader "Content-Type", "text/xml"
>に修正してみてください。
すみません。書き込み時のタイプミスです。
開発PCと質問させていただいてるPCが異なるもので…。
>XMLHTTPをアーリーバインドしている時には、暗黙の型変換が行われるので
> oHTTP.send doc
>でも動作しますが、今回のような宣言にしているときには、
> oHTTP.send CVar(doc)
>のように、明示的に型変換を行うか、もしくは渡す引数を
> Dim doc As Variant
>のように宣言しておく必要があります。
なるほど。
はじめ、どちらもレイトバインドにしていたのですが、
いろいろ試行錯誤していて、いつのまにかDOMだけアーリーバインドに
なっていました。
XMLHTTPをアーリーバインドにすることで、万事解決いたしました。
本当にありがとうございます。
まだ実際にWebサーバとXMLのやりとりができるところまでは
できていないので、また質問させていただくことがあるかもしれませんが、
よろしくお願いいたします。
ツイート | ![]() |