Gacuheのhttp-postについて
使い方がよく分からない、という記事です。
分かっていることを整理
環境:Gauche scheme shell, version 0.9 [utf-8,pthreads], i686-pc-cygwinで。
文字列
第3引き数bodyを文字列で渡した場合
(http-post svr path "test=aaaa&test2=bbbbb")
phpのprint $_POST["test"]で受け取れる。
perlのcgi.pmのparamで受け取れる。
gaucheのcgi-main下で(cgi-get-parameter "test" params)の形で受け取れる。
リスト
2パターンあるリスト形式のうち、単純なname - valueのリストの場合。
(http-post svr path '(("test" "aaa") ("test2" "bbbbbb")))
この時は、処理系側でmultipart/form-dataに加工して送信する、ということらしい。
phpのprint $_POST["test"]で受け取れる。
perlのcgi.pmのparam('test')では""になる。
gaucheでも同じく空っぽ。
検索した範囲では、第3引き数を""にしてhttp-getのように、pathのところにクエリー文字列の形でデータを渡してるものがいくつかあった。
postが必要で、短いデータの時はこれでいけるのか。
でもブログとか更新したい時はこれでは対応できないからなあ。
ちなみに、使用した単純なCGIは、
<html> <body> <h1>test for post</h1> <form method="post" enctype="multipart/form-data" action="http://localhost/gauche/post.cgi"> <input type="hidden" name="test" value="aaaaaaaaaaaaaaaaaa"> <input type="submit" name="submit" value="submit"> </body> </html>
みたいなhtmlのフォームからの入力は全て受け取れている。
PHP 5.2.13
<html> <head> <title>test for post method</title> </head> <body> <h1>postdata</h1> <?php print "posted data["; print $_POST["test"]; print "]<br>"; var_dump($_POST); ?> </body> </html>
#!gosh (use www.cgi) (use text.html-lite) (use rfc.cookie) (cgi-main (lambda (params) (list (cgi-header) (html-doctype) (html:html (html:body (html:p params) (html:p (cgi-get-parameter "test" params)) (html:p "req_method") )))))
#!perl use CGI qw/:standard/; print header(-expires=>'+1m',-charset=>'utf-8'), start_html( -title=> 'post test', -lang =>'ja', -head=>meta( {'http-equiv' => 'Content-Type', -content => 'text/html; charset=utf-8' }) ), h1(param('test')), h2(param), end_html;