『コマンドプロンプトから Windows PHP を使って POST 投稿する』では、PHP を使いました。PHP のほうが関数等整理されてドキュメントも揃っているから扱いやすく、応用もしやすいです。 ( Google Chrome 拡張 : PHP Docs ) VBScript は Windows 標準ですが、込み入った処理は全て自作する必要があるので、通常あまり利用されません。ここでは、特に SHIFT_JIS を UTF-8 に変換する必要があるので(さらにパーセントエンコーディングも必要)、以下のコードをそのまま使う必要があります。
Set objHTTP = Wscript.CreateObject("MSXML2.XMLHTTP")
Set Stream1 = Wscript.CreateObject("ADODB.Stream")
Set Stream2 = Wscript.CreateObject("ADODB.Stream")
Set StreamBin = Wscript.CreateObject("ADODB.Stream")
strTargetUrl = "http://winofsql.sakura.ne.jp/lightbox/work/web/log.php"
strData = Replace( Wscript.Arguments(0), "\n", vbCrLf )
strData = "send=ok&text=" & EUC_URLEncode(strData)
' False は非同期
Call objHTTP.Open("POST",strTargetUrl,False)
' 標準 POST 用
Call objHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
' 仕様
Call objHTTP.SetRequestHeader("Content-Length",Len(strData))
' 送信
Call objHTTP.Send(strData)
' ***********************************************************
' SHIFT_JIS を UTF-8 に変換して URLエンコード
' ***********************************************************
Function EUC_URLEncode(str)
Dim Buffer,LineBuffer,i,CWork
Stream1.Open
Stream1.Charset = "shift_jis"
' shift_jis で入力文字を書き込む
Stream1.WriteText str
' コピーの為にデータポインタを先頭にセット
Stream1.Position = 0
Stream2.Open
Stream2.Charset = "utf-8"
' shift_jis を euc-jp に変換
Stream1.CopyTo Stream2
Stream1.Close
' コピーの為にデータポインタを先頭にセット
Stream2.Position = 0
' バイナリで開く
StreamBin.Open
StreamBin.Type = 1
' テキストをバイナリに変換
Stream2.CopyTo StreamBin
Stream2.Close
' 読み込みの為にデータポインタを先頭にセット
StreamBin.Position = 0
Buffer = ""
StreamBin.Read(3)
Do while not StreamBin.EOS
LineBuffer = StreamBin.Read(16)
For i = 1 to LenB( LineBuffer )
CWork = MidB(LineBuffer,i,1)
Cwork = AscB(Cwork)
Cwork = Hex(Cwork)
Cwork = Ucase(Cwork)
if Len(Cwork) = 1 then
Buffer = Buffer & "%0" & Cwork
else
Buffer = Buffer & "%" & Cwork
end if
Next
Loop
StreamBin.Close
EUC_URLEncode = Buffer
End Function
このコードは、もともとは Twitter 投稿の為に作成したものですが、実際に日次のバッチ処理として運用しています。 更新された情報があった場合、夜間にインターネット上のサーバーの DB を更新する為の通信処理として使っています。 バッチファイル
@echo off
setlocal
set path=.\php;%PATH%
set myurl=http://xxxxx.sakura.ne.jp/lightbox/..../text.log
REM VBScript で投稿
cscript test.vbs "アップ ロードする\n文 字 列\nの指定"
REM 5秒間待機
timeout 5 /nobreak
REM 投稿後のログを PHP でダウンロード
php -r copy('%myurl%','text.log');
endlocal
このテストでは、バッチファイルで投稿後、ログを直接 PHP で取得しています。このコードでは、MSXML2.XMLHTTP というクライアント用のオブジェクトを使っているので、この投稿処理をループ内で使って連続処理を行う事もできます(サーバー用のオブジェクトである ServerXMLHTTP では連続処理はできません)。この何年かで、これらのオブジェクトは Microsoft によってこっそり更新されたりして振る舞いがいろいろ変ったりしていますが、ケースバイケースでどちらかを使わないと動かない場合があります。しかし、たいていにおいて クライアント側のオブドェクトで動作すると思います。 関連する記事 コマンドプロンプトから VBScript を使って POST 投稿する PHP による『超簡易掲示板』 / アブリケーションからの POST 検証用 Windows 標準の CDO.Message で簡単にバッチ処理からメールを送る
タグ:VBScript
|
|
【役に立つWindowsの最新記事】




























