2009-05-25 14 views
14

私はXML-RPCリクエストを処理するためのPerl CGIスクリプトを作成しようとしています。このスクリプトでは、XML文書がHTTP POST要求の本体として送信されます。CGI.pmでリクエスト本文全体を取得するにはどうすればよいですか?

CGI.pmモジュールは、HTTPリクエストから名前付きparamsを抽出するのに素晴らしい仕事をしますが、HTTPリクエスト本体全体(つまり、XML-RPCのXMLドキュメント)を与える方法を理解できません私が処理している要求)。

CGI.pmではない場合、リクエストからこの情報を解析できる別のモジュールがありますか?私は環境変数から "手で"この情報を抽出する必要はありません。助けてくれてありがとう。

答えて

24

特殊なパラメータ名POSTDATAを使用すると、生のPOSTデータを取得できます。

my $q = CGI->new; 
my $xml = $q->param('POSTDATA'); 

また、あなたの代わりにCGI.pmを使っての直接STDINを読むことができるが、その後、あなたはCGI.pmが行う他のすべての有用なものを失います。

POSTDATAトリックは、優秀なCGI.pmドキュメントhereに記載されています。

+0

ありがとうございます!申し訳ありませんが私はドキュメントでそれを逃した。 –

12

右はPOSTDATAを使用できますが、リクエストContent-Typeが 'multipart/form-data'に設定されていない場合にのみ動作します。

'multipart/form-data'に設定されている場合、CGI.pmは独自のコンテンツ処理を行い、POSTDATAは初期化されません。

他のオプションは$cgi->query_stringおよび/または$cgi->Dumpです。

$cgi->query_stringは、POSTの内容をGET形式(param=value&...)で返します。クライアントが渡したPOST STDINの内容を単純に取得する方法はないようです。

CGI.pmを変更すると、POST要求の標準入力の実際の内容を取得するために、次のような変数に@linesの内容を保存するように行620を修正することができます。

$self->{standard_input} = join '', @lines; 

$cgi->{standard_input}でアクセスしてください。

関連する問題