Shmengy has asked for the wisdom of the Perl Monks concerning the following question:

Hi All:

I am having a problem with a particular script that is supposed to receive a string from a business partner, alter the string and return it to them, giving the 200 OK at each step.

They have told me that, "I guess what is happening is that since you've configured your script to return a 500 ERR response that our server continues to POST. Our server POSTs until you return a 200 OK".

I don't see how I have configured my script to return 500 ERR (or *ANYTHING* for that matter). The code in question is below.

Any/all help is greatly appreciated.

#read the post from partner system and add 'cmd' read (STDIN, $query, $ENV{'CONTENT_LENGTH'}); $query .= '&cmd=_notify-validate'; # post back to partner system to validate use LWP::UserAgent; $ua = LWP::UserAgent->new; my $req = HTTP::Request->new(POST => ''); $req->content_type('application/x-www-form-urlencoded'); $req->content($query); my $res = $ua->request($req); # split posted variables into pairs @pairs = split(/&/, $query); $count = 0; foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $variable{$name} = $value; print STDERR "$name => $value\n"; $count++; }

Replies are listed 'Best First'.
Re: HTTP POSTing problem
by davorg (Chancellor) on Dec 28, 2001 at 19:10 UTC

    I'd be willing to bet that earthboundmisfit's suggestion is the key to your problem, but I'd like to add one further hint. Whenever your web server returns a 500 error to the client, you're very likely to find a far more useful message in the web server error log.


    "The first rule of Perl club is you do not talk about Perl club."
    -- Chip Salzenberg

Re: HTTP POSTing problem
by earthboundmisfit (Chaplain) on Dec 28, 2001 at 18:49 UTC
    Aside from the obvious invective to use CGI, strict, -wT , the first thing I notice is that you never print the required HTTP header:

    print "Content-Type: text/html\n\n";

    This would be enough to generate a 500 error. BTW, when using all you would have to do to accomplish this is type print header(). Secondly, you wouldn't have to worry about parsing the query string from the buffer. Check out Ovid's words on this, use CGI or die;