ECMAScriptサブセットDMonkeyでCGI その2 リクエストを受け取る
今回はクライアントからのフォームを通じてのリクエストを受け取ってみます。
dm.exeと同じディレクトリに置くcgi.dms
- どこからでもimportできるようにdm.exeと同じディレクトリに置く
- CGIがリクエストを受け取る仕組みについてはここを参考にした
- 環境変数を取得するメソッドはWSHを利用
- POST,GET,PATH_INFOはあらかじめ配列にしておく
// cgi.dms // 環境変数を取得するメソッド var getEnv = WScript.CreateObject('Wscript.Shell').Environment('Process'); // 生のリクエストデータ var request = { POST : read( getEnv('CONTENT_LENGTH')), GET : getEnv('QUERY_STRING'), PATH_INFO : getEnv('PATH_INFO') }; // 文字列をハッシュにして返す function parse( str){ str = str.replace(/\+/g,' '); var items = str.split('&'); var n,_ = {},pair; for( n in items){ pair = items[n].split('='); _[ decodeURI( pair[0])] = decodeURI( pair[1]); } return _; } // GETのハッシュ var GET = parse( request.GET); // POSTのハッシュ var POST = parse( request.POST); // PATH_INFOの配列 var PATH_INFO = (function (){ var p = request.PATH_INFO.split('/'); p.shift(); return p; })();
実際にアクセスするtest.dms
- cgi.dmsをインポート
- フォームを表示
- POST['test']があれば表示
import cgi; print("Content-type:text/html\n\n"); print(' <html><head> <title>test.dms</title> </head><body> <form method="POST" action="test.dms"> <input name="test" size="20" /><br/> <input type="submit" /> </form> '); if( cgi.POST.hasKey('test')) { println('cgi.POST[test] : ' + cgi.POST.test + '<br/>'); } print(' </body></html> ');
試してみる
アクセスして文字を打ち込んでます
POSTメソッドで送ったリクエストがきちんと表示されています。