use CGI; use CGI::Carp qw(set_progname); use XML::Simple; my $request = CGI->new(); my $method = $request->request_method(); # 方法必須是POST if ($method eq ’POST’) { eval { my $content_type = $request->content_type(); if ($content_type eq ’text/xml’) { print $request->header(-status =>’415 Unsupported Media Type’, -type => ’text/xml’); croak "Invalid content type: $content_type\n"; } # 如果方法是POST,內容既不是URL編碼也不是多部分形式, #那麼整個post會被填充到一個參數中:POSTDATA。 my $error_xml = $request->param(’POSTDATA’); my $ref = XML::Simple::XMLin($error_xml); my ($name, $msg, $location) =($ref->{’name’}, $ref->{’message’}, ’’); $location = $ref->{’location’} if (defined($ref->{’location’})); # 改變日誌中的名字 set_progname(’Client-side error’); my $remote_host = $request->remote_host(); carp "name: [$name], msg: [$msg], location: [$location]"; }; if ($@) { print $request->header(-status => ’500 Internal server error’,-type => ’text/xml’); croak "Error while logging: $@"; } else { # 這部分響應代碼錶明操作成功了,但是用戶端不應該期待任何內容 print $request->header(-status => ’204 No content’,-type => ’text/xml’); } } else { print $request->header(-status => ’405 Method not supported’,-type => ’text/xml’); croak "Unsupported method: $method"; } |