perlの勉強中です。
あるサーバーにhoge.plを置いて、XMLをPOSTでrequestを投げ、
hoge.pl側で受け取ったPOSTのXMLの中身をfuga.logに書き込み、
responseにPOSTで来たXMLをそのまま返却しようとしています。
ログの書き込みはmakeLog.plという同じ場所に置いてあるcgiを実行することで書き込もうとしておりますが
現在、XMLの中身はまだmakeLog.plに渡しておらずとりあえずログの書き込みができる+XMLが返却されることを確認するところでハマってしまいました。
現状、Advanced REST Clientのような指定URLにPOSTでXMLを投げられるツールを利用して確認しています。
このツールでリクエストをhoge.plに投げた結果、ステータスは200でXMLもリクエストと同じものが返却されました。
しかし、fuga.logは更新されておりませんでした。
linux上でcgi-binに移動して「perl hoge.pl」を実行すると
POSTデータはないので
Content-Type: text/xmlのみの表示となりますが、fuga.logは更新されておりました。
最初hoge.plにすべて書こうとしましたが、500エラーでXML返却ができなかったので別ファイルにする方法に切り替えました。
httpd.confの
<Directory "/var/www/cgi-bin">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>
も変更してみましたが変わりませんでした。
httpリクエストでのperl内での他perlの実行もしくは
1ファイル内でXMLの返却+ログ出力でよい方法はないでしょうか?
【hoge.pl】
'#!/usr/bin/perl --
use LWP::UserAgent;
use strict;
use CGI;
my $q = new CGI;
my $postStr = "";
for my $param_name ($q->param) {
$postStr = $postStr . $q->param($param_name);
}
perl /var/www/cgi-bin/makeLog.pl
;
print "Content-Type: text/xml\n\n";
print $postStr;
【makeLog.pl】
'#!/usr/bin/perl --
use strict;
use utf8;
use open ":utf8";
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
my $nowDateTime = sprintf("%04d/%02d/%02d %02d:%02d:%02d" , $year + 1900, $mon + 1, $mday, $hour, $min, $sec);
open(DATAFILE, ">> fuga.log") or die("Error:$!");
print DATAFILE $nowDateTime . "\n";
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/10 01:11