[InternetExplorer.Application] または [IWebBrowser2] の Navigate2 メソッドでは、ヘッダー部分の書き換えが可能だ。 無いものは新規に追加され、同じ名前のものは上書きされる仕様のようだ。
この Navigate2 の第5引数に [Content-Type: application/x-www-form-urlencoded] を与え、第4引数に POST で送りたいデータを指定すると、POST リクエストが送られる...という記載が Microsoft のサイトをはじめ多くのホームページに載っている。 この第4引数が PostData As Variant と書かれていることから、第5引数と同じタイプのパラメータで大丈夫だと思いがちである。
しかし、其のパターンでは、ヘッダーに Content-Type: ...は付加されるが、なぜかMethod は GET で送られてしまう。 ここで、はまってしまうのはボクだけだろうか...
Microsoft のNavigate2の説明 の最後の方に [Array and point to a SAFEARRAY Data Type] という言葉が出て来る。 配列の形でパラメータを与えなければ、何が何でも GET になってしまうようだ。 解りにくい...
'VBScript
Dim bDATA, strHeader
Set Stream = CreateObject("ADODB.Stream")
Stream.Open
Stream.Charset = "Shift_JIS"
Stream.WriteText "name=漢字"
Stream.Position = 0
Stream.Type = 1
bDATA = Stream.Read
Stream.Close
Set Stream = Nothing
Set IE = CreateObject("InternetExplorer.application")
IE.Visible = True
strHeader = "Content-type: application/x-www-form-urlencoded" + vbCrLf
IE.Navigate "http://www.hoge.jp/hoge.pl", , , bDATA, strHeader
// JavaScript
var bData, strHeader;
var Stream = new ActiveXObject("ADODB.Stream");
Stream.Open();
Stream.Charset = "Shift_JIS";
Stream.WriteText("name=hoge&work=仕事");
Stream.Position = 0;
Stream.Type = 1;
bData = Stream.Read();
Stream.Close();
var IE = new ActiveXObject("InternetExplorer.Application");
IE.Visible = true;
strHeader = "Content-Type: application/x-www-form-urlencoded\r\n";
IE.Navigate2("http://www.hoge.jp/hoge.pl", "", "", bData, strHeader);
Microsoft のサンプルが、 "Content-Type: application/x-www-form-urlencoded\n\r"; と書いてあるせいか、そのまま、 \n\r と書いてあるホームページをいくつか見かけた。