proglog

主にプログラミングに関する断片的メモ

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"]で受け取れる。
perlcgi.pmのparamで受け取れる。
gauchecgi-main下で(cgi-get-parameter "test" params)の形で受け取れる。

リスト

2パターンあるリスト形式のうち、単純なname - valueのリストの場合。

      (http-post svr  path '(("test" "aaa") ("test2" "bbbbbb")))

この時は、処理系側でmultipart/form-dataに加工して送信する、ということらしい。
phpのprint $_POST["test"]で受け取れる。
perlcgi.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;