如何解决mod_perl和CGI行为
这一定是愚蠢的,我做错了。这是一个新手类型的问题。
原始脚本是坐着的,等待第三者连接并向其中发布一些xml,它接收该xml,进行一些验证并将其存储在db中。那部分很好。问题是我的回应。我正在尝试使用CGI的header()函数,但它没有表现。它变成空白。显然,我可以手动执行此操作并只打印标题字符串,但现在我真的很好奇为什么这样做如此奇怪。
这是cgi脚本的简化测试版本:
use strict;
use warnings;
use Data::Dumper::Names;
use CGI qw(:standard);
use Apache2::Connection ();
use Apache2::RequestRec ();
$| = 1;
# Grab the request object provided by mod_perl.
our $request_obj = shift;
our $connection = $request_obj->connection;
our $remote_ip = $connection->client_ip();
my $cgi = CGI->new($request_obj->args());
print STDERR Dumper($cgi);
my $input = $cgi->param('POSTDATA');
print STDERR Dumper($input);
my $cgi_header = $cgi->header();
print STDERR Dumper($cgi_header);
my $cgi_full_header = $cgi->header(-type => 'application/xml');
print STDERR Dumper($cgi_full_header);
my $q = CGI->new({});
print STDERR Dumper($q);
my $q_header = $q->header();
print STDERR Dumper($q_header);
my $q_full_header = $q->header(-type => 'application/xml' );
print STDERR Dumper($q_full_header);
输出:
$cgi = bless( {
'.r' => bless( do{\(my $o = '94118860562256')},'Apache2::RequestRec' ),'param' => {
'POSTDATA' => [
'test'
],'XForms:Model' => [
'test'
]
},'use_tempfile' => 1,'.fieldnames' => {},'.charset' => 'ISO-8859-1','escape' => 1,'.parameters' => [
'XForms:Model','POSTDATA'
]
},'CGI' );
$input = 'test';
$cgi_header = '';
$cgi_full_header = '';
$q = bless( {
'.parameters' => [
'XForms:Model','POSTDATA'
],'.r' => bless( do{\(my $o = '94118860562256')},'param' => {
'POSTDATA' => [
''
],'XForms:Model' => [
''
]
}
},'CGI' );
$q_header = '';
$q_full_header = '';
这是我用来发送POST的简单测试脚本。
#!/perl/bin/perl
use strict;
use warnings;
use DBI;
use URI;
use LWP::UserAgent;
use Data::Dumper::Names;
my $ua = LWP::UserAgent->new;
$ua->max_size( 131072 );
$ua->agent('test_xml_pusher');
$ua->ssl_opts(verify_hostname => 0);
my $url = URI->new;
$url->scheme('https');
$url->host('xxxxxxxxxxxxxxxxxxxxxxxxx');
$url->port(443);
$url->path_segments('test.cgi');
# Yes,I kNow... it's not valid xml... don't care for the purposes of this test.
#
my $xml = 'test';
my $response = $ua->post( $url,Content => $xml,'Content-Type' => 'application/xml' );
print Dumper($response);
my $status_line = $response->status_line;
print Dumper($status_line);
my $content = $response->content;
print Dumper($content);
那么$cgi_header
为什么为空?为什么$q
最终还是引用了与$cgi
相同的东西,即使我尝试将其初始化为my $q = CGI->new({});
呢? (我也尝试使用空引号而不是空括号。)
有什么想法吗?
谢谢!
我的环境是一台运行apache httpd 2.4.34且具有mod_perl 2.0.11和perl 5.22.4的centos 7服务器。 (httpd是从SCL安装的,而perl和mod_perl是从源安装的。)
- 安迪
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。