MSXML2.XMLHTTPでファイルをアップロードする と対になる処理です。受けるほうは通常と同じで簡単ですが、送るほうは注意すべき点がいくつかあります まず、送るほうでは日本語を URL エンコードする必要があるので、JavaScript を呼び出して encodeURIComponent を使用しています。( その為、PHP ではデコードされると UTF-8 になるので注意 ) 後、http で POST する際の仕様として、http ヘッダに Content-Type として application/x-www-form-urlencoded をセットしています( データサイズは実際ブラウザが行っているのでセットしています。) VBSCript 側
<JOB> <SCRIPT language="JScript"> function js(str) { return encodeURIComponent( str ); } </SCRIPT> <SCRIPT language="VBScript"> ' XMLHTTP を作成 Set objHTTP = Wscript.CreateObject("Msxml2.ServerXMLHTTP") lResolve = 60 * 1000 lConnect = 60 * 1000 lSend = 60 * 1000 lReceive = 60 * 1000 Call objHTTP.Open("POST","https://yourdomain/test/post.php",False) Call objHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") strData = "data=" & js("日本語をURLエンコードする") Call objHTTP.SetRequestHeader("Content-Length",Len(strData)) Call objHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive) Call objHTTP.Send(strData) Wscript.Echo objHTTP.responseText </SCRIPT> </JOB>
PHP 側
<?php header( "Content-Type: text/html; charset=utf-8" ); header( "Expires: Thu, 19 Nov 1981 08:52:00 GMT" ); header( "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0" ); header( "Pragma: no-cache" ); mb_language( "ja" ); mb_internal_encoding("utf-8"); foreach( $_POST as $key => $value ) { // $_GET の中には変換前が残る $_GET[$key] = $value; // $_POST を HTML 埋め込み用変数として使用する $_POST[$key] = htmlentities( $value ); } if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) { // ファイルへ入力されたデータを書き込み file_put_contents( "text.dat", mb_convert_encoding( $_GET['data'], "shift_jis", "utf-8" ) ); print "POST処理を受付けました"; } ?> <form method="post"> <input type="text" name="data" value="<?= $_POST["data"] ?>"> <input type="submit" name="send" value="送信"> </form>
|