This post is in response to [EMAIL PROTECTED]'s "two forms" post on
Tue, 24 Sep 2002, and also intended to open up general brainstorming about
the "malformed headers" error reported in that post:

Like Ahmed, I am also receiving a "malformed headers" error as a result of a
LWP GET request by a CGI script for an HTML page. I sometimes get a
"Premature end of script headers" error as well. However, when I execute the
CGI script via telnet on port 80 I can see what seem to be intact headers.
When I run the script from the command prompt it does in fact return all the
HTML it requests, and I confirmed by writing debug statement to STDERR that
my script runs past the handoff of the request to the UserAgent when invoked
via a browser.

The most notable similarity between my headers and Ahmed's is the
"Connection: Close" header... so I was wondering if the problem is that the
connection is closing before the request is complete. I therefore
experimented a bit with the timeout and connection-cache UserAgent
properties but that didn't seem to help. (Actually, my script was having
trouble finding ConnCache.pm even though it was in my specified lib path,
but I created the UserAgent object with the connection attribute set to
'keepalive' which should suffice?)

I found a report by someone developing in a shared website environment that
suggests LWP could malfunction in an environment where socket permissions
are restricted: http://cgi-help.virtualave.net/. I am on a shared Sun
Solaris webserver (OS 5.8) running Apache/1.3.12; Ahmed: are you on a shared
webserver as well?

I considered the possibility that certain servers require explicit
specification of the charset in the Content-type header (as per
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43 ) but that
didn't seem to help either. I also considered the possibility that the
server is requiring a specific sequence of headers, but I requested a simple
page via telnet on port 80 to discover that the server simply returned the
http-version/status, server, date and content-type headers; that's all! So I
made sure to send exactly those headers, in that exact order, to no remedy.
I considered that there might be some header negotiation going on that I
can't discern simply by telneting on port 80, so I tried to install a local
verion of tcpdump but I didn't seem to be able to configure and install it
properly with my limited permissions.

Phew! Any ideas anyone? Should I give up running LWP in this shared
webserver environment?

Below is my code,
Suzanne Dimant

======== http://www.dimantdomain.com/cgi-bin/request3.cgi
===================

#!/bin/perl5

 use lib
"/home/dimant/wwwsite-dimantdomain.com/lib/lib/site_perl/5.6.0/sun4-solaris/
, /home/dimant/wwwsite-dimantdomain.com/lib/lib/site_perl/5.6.0/";

 use LWP;
#can't find ConnCache.pm even tho it's in the LWP folder under lib path
#use LWP::ConnCache;
 print STDERR "line 9: lines 1-8 OK - ";
# Create a user agent object
 my $ua = LWP::UserAgent->new(
  env_proxy => 1,
  keep_alive => 1,
  timeout => 60,
  agent => "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; AT&T CSM6.0)"
 );

#can't find ConnCache.pm even tho it's in the LWP folder under lib path
#$cache = new LWP::ConnCache;
#$ua->conn_cache($cache);

# Create a request
 $req = HTTP::Request->new(GET =>
'http://www.dimantdomain.com/perlprogs.html');
 $req->date('Tue, 01 Oct 2002 11:59:00 GMT');
 $req->server('Apache/1.3.12 (Unix) ApacheJServ/1.1 PHP/4.0.3pl1
PHP/3.0.14');
#$req->header('Accept' => 'text/html');  # send request
 $req->content_type('text/html; charset=ISO-8859-4');
 print STDERR "line 21: lines 10-20 OK - ";
# Pass request to the user agent and get a response back
 my $res = $ua->request($req);
 print STDERR "line 24: lines 22-23 OK - ";
# Check the outcome of the response
if ($res->is_success) {
    print $res->content;
    #to print headers to STDOUT:
    #print $req->as_string;
} else {
    print "Error: " . $res->status_line . "\n";
}
===================== end request3.cgi ==============


Reply via email to