ドキュメント読めよバカ野郎

・・・・でまぁこんな場合我が家の家訓に則って「ソース嫁」ってことで。

でどうやらCatalystではHTTP::Bodyというのを使ってクエリの解析を行っていることがわかった。

でそのHTTP::Bodyの実装を見ると、リクエストのコンテントタイプをみて厳密に処理分けを行っているのがわかった。

なるほどなるほど、application/x-www-form-urlencodedでリクエストするとHTTP::Body::UrlEncodedが読み込まれ、クエリの解析を行うので生データは保持しない。

だから$c->req->bodyでPOSTの生データを取れなかったのだ。

CatalystでPOSTの生データを取りたければ、リクエスト時のコンテントタイプをapplication/octet-streamにしなければならない。

application/octet-streamにすれば、HTTP::Body::OctetStreamが読み込まれ、生データを得ることができる。

なんだか面倒。HTTP::Body便利だけど厳密すぎるなぁ、両方取りたい時どうすりゃいいのら?ってか僕が壮大な勘違いをしているのかもしれない。もっと別の方法があるのかも。

http://d.hatena.ne.jp/fbis/20080202/1201943589

ドキュメントに普通に書いてあるよ ><

$req->body

Returns the message body of the request, unless Content-Type is application/x-www-form-urlencoded or multipart/form-data.

http://search.cpan.org/~mramberg/Catalyst-Runtime-5.7012/lib/Catalyst/Request.pm#$req-%3Ebody

ドキュメント読めよバカ野郎