1

This has got to be something silly I'm doing wrong. It's such a newbie type problem.

The original script is something that sits and waits for a 3rd party to connect and POST some xml to it, it takes that xml, does some validation, and stores it in a db. That part is fine. The problem is my response. I'm trying to use the header() function from CGI and it's just not behaving. It comes up blank. Obviously I could just do this manually and just print the header string, but now I'm really curious why this is behaving so strangely.

Here is a stripped down test version of the cgi script:

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);

And the output:


$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'
                               ],
              'escape' => 1,
              '.fieldnames' => {},
              '.charset' => 'ISO-8859-1',
              'use_tempfile' => 1,
              '.r' => bless( do{\(my $o = '94118860562256')}, 'Apache2::RequestRec' ),
              'param' => {
                           'POSTDATA' => [
                                           ''
                                         ],
                           'XForms:Model' => [
                                               ''
                                             ]
                         }
            }, 'CGI' );
$q_header = '';
$q_full_header = '';

And here is the simple test script I'm using to send the 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);

So why is $cgi_header empty? And why does $q end up being a reference to the same thing as $cgi even though I tried initializing it as my $q = CGI->new({});? (I also tried empty quotes instead of empty brackets.)

Any thoughts?

Thanks!

My environment is a centos 7 server running apache httpd 2.4.34 with mod_perl 2.0.11 and perl 5.22.4. (httpd is installed from from SCL, but perl and mod_perl are installed from source.)

-- Andy

TLP
  • 66,756
  • 10
  • 92
  • 149

0 Answers0