使用mod_perl在Json RPC中出现问题

时间:2014-07-03 16:52:51

标签: json apache perl

我遇到了Json RPC和mod_perl的问题。我试图从通过mod_perl在Apache中运行的cgi脚本返回一个值。但是在返回值中,会自动添加以下apache标头,因此我无法从客户端脚本访问返回值。

Status: 200
Content-Type: application/json; charset=UTF-8

在我的Apache配置文件中,我有以下指令。

LoadModule perl_module modules/mod_perl.so
PerlSwitches -w
PerlSwitches -T
Alias /perl /var/www/html/perl
<Directory /var/www/html/perl>
    SetHandler perl-script
    PerlResponseHandler ModPerl::Registry
    Options +ExecCGI
</Directory>

我的cgi脚本粘贴在下面。

#!/usr/bin/perl
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
use JSON::RPC::Server::CGI;
use strict;
use Data::Dumper;
my $server = JSON::RPC::Server::CGI->new;

$server->dispatch('Myapp')->handle();

Myapp.pm

#!/usr/bin/perl
package Myapp;
use base qw(JSON::RPC::Procedure); # Perl 5.6 or more than
use strict;
use Data::Dumper;
sub test : Public(u1:str){
        my ($s, $obj) = @_;
        my $u1 = $obj->{u1};
        return $u1;
}
1;

我的客户端脚本是

#!/usr/bin/perl
use JSON::RPC::Client;
use Data::Dumper;
my $client = new JSON::RPC::Client;
my $uri = 'http://IP/perl/test.cgi';  
$client->prepare($uri, ['test']);
$str= $client->test('testing');
print "$str\n\n";

在正常情况下,输出应为测试。但在我的情况下,我得到以下错误。

malformed JSON string, neither array, object, number, string or atom, at character offset 0 (before "Status: 200\r\nConte...") at /usr/local/share/perl5/JSON/RPC/Client.pm line 186

问题是因为某些http标头会自动添加到返回值中。有没有办法压制这些标题?

注意:请不要推荐普通的cgi脚本或运行perl脚本作为守护进程,因为它已经在我的工作和测试。我们正在使用mod_perl来实现高性能。

0 个答案:

没有答案