2009年07月02日


MSXML2.XMLHTTPでファイルをPOSTする

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 = CreateObject("MSXML2.XMLHTTP")

Call objHTTP.Open("POST","http://localhost/php/090702/post.php",False)
Call objHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
strData = "text=" & js("日本語をURLエンコードする")
Call objHTTP.SetRequestHeader("Content-Length",Len(strData))
Call objHTTP.Send(strData)
Wscript.Echo objHTTP.responseText


</SCRIPT>

</JOB>

PHP 側
<?
header( "Content-Type: text/html; Charset=shift_jis" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

mb_language( "ja" );
mb_internal_encoding("euc-jp");

foreach( $_GET as $Key => $Value ) {
	$_POST[$Key] = $_GET[$Key];
}
foreach( $_POST as $Key => $Value ) {
	$_POST[$Key] = str_replace("\\\\", "\\", $Value );
	$_POST[$Key] = str_replace("\\'", "'", $_POST[$Key] );
	$_POST[$Key] = str_replace("\\\"", "\"", $_POST[$Key] );
}

if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {

	$Message = "POSTされました<br>\n";

	// ファイルへ入力されたデータを書き込み
	file_put_contents( "text.dat", mb_convert_encoding( $_POST['text'], "shift_jis", "utf-8" ) );

	print "POST処理を受付ました";

}

?>

■ 関連する記事
WSH : VBScript から JavaScript の呼び出し
MSXML2.XMLHTTPでファイルをアップロードする
prototype.js の Ajax.Request を使い、FORM を使わずにデータをPOSTする

■ 関連するMicrosoftドキュメント
XMLHTTPを使用して2バイト文字を含むFormデータを送信する


posted by at 2009-07-02 16:52 | Comment(0) | クライアント/サーバー | このブログの読者になる | 更新情報をチェックする
SQLの窓全体の検索
Loading
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。