我遇到了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来实现高性能。