Examples for this perl module is almost non-existent except for the ONE example in the documentation. I'm hoping somebody here has experience with this module. I'm using the following CGI script to submit a form I made (for practice). It doesn't seem to be 'submitting' the form. The result of this script doesn't seem to be anything more than a printout of my form page (not submitted). Could anyone tell me what is wrong here??? Feel free to give the script a try.
#-------------------------------------
#!c:\perl -w
use strict;
use CGI::Carp qw(fatalsToBrowser);
use URI::URL;
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Request::Common;
use HTTP::Request::Form;
use HTML::TreeBuilder 3.0;
my $ua = LWP::UserAgent->new;
my $url = url 'my $res = $ua->request(GET $url);
my $tree = HTML::TreeBuilder->new;
$tree->parse($res->content);
$tree->eof();
my @forms = $tree->find_by_tag_name('form');
die "What, no forms in $url?" unless @forms;
my $f = HTTP::Request::Form->new($forms[0], $url);
$f->field("username" , "user"
;
$f->field("password" , "pass"
;
$f->field("page","2"
;
my $response = $ua->request($f->press("submit"
);
print $response->content if $response->is_success;
exit;
#-------------------------------
Just for reference, here is the 'form' that I am trying to submit with the above script. It is actually a Perl CGI so you can see what is required to get a valid submission. HTTP_REFERER must be from my domain and QUERY_STRING must be blank. A cookie is set once there is a valid form submission.
#-------------------------
#!c:\perl -w
use strict;
use CGI;
use CGI::Cookie;
use CGI::Carp qw(fatalsToBrowser);
my $query = new CGI;
#-------------- Global Variables ----------------
my $DOMAIN = ".globalnamespace.com";
my $username = $query->param('username') || '';
my $password = $query->param('password') || '';
my $page = $query->param('page');
#------------------------------------------------
#--------------- Main Program -------------------
if ($page eq ""
{
displayLoginPage();
exit;
}
elsif ($page eq "2"
{
if(!(checkReferer()))
{
print "Content-type: text/html\n\n";
print "Breakin detected!!!<br>\n";
print qq{
page = $page<br>
username = $username<br>
password = $password<br>
referer = $ENV{'HTTP_REFERER'}<br>
query string = $ENV{'QUERY_STRING'}<br>
};
displayLoginPage();
exit;
}
if(!(verifyUser()))
{
print "Content-type: text/html\n\n";
print "That didn\'t work!<br>\n";
print qq{
page = $page<br>
username = $username<br>
password = $password<br>
referer = $ENV{'HTTP_REFERER'}<br>
query string = $ENV{'QUERY_STRING'}<br>
};
exit;
}
else
{
setVerCookie();
continuePage();
exit;
}
exit;
}
else
{
exit;
}
#------------------------------------------------
sub checkReferer
{
my $params =lc($ENV{'QUERY_STRING'});
$ENV{'HTTP_REFERER'} =~ s|.*(globalnamespace.com).*||i;
if(($params eq '')&&($1 ne ''))
{
return(1);
}
else
{
return(0);
}
}
sub verifyUser
{
if(($username eq 'user')&&($password eq 'pass'))
{
return(1);
}
else
{
return(0);
}
}
sub setVerCookie
{
## Set a Domain Cookie with no expiration date - expires on browser close
print qq{Set-Cookie: mycookie=set; domain=$DOMAIN; path=/;\n};
}
sub displayLoginPage
{
print qq
{
<html>
<head>
<title>Login</title>
</head>
<body>
<center>
**Please ensure that Javascript and Cookies are enabled**<br><br>
Please enter your Username and Password to Login:<br>
<br>
<form action="$ENV{'SCRIPT_NAME'}" method="post">
Username: <font face="courier" size='1'><input type="text" size=10 name="username"></font>
<br><br>
Password: <font face="courier" size='1'><input type="password" size=10 name="password"></font>
</font>
<br><br>
<input type="hidden" name="page" value="2">
<input type="submit" name="submit" value=" Login ">
</form>
page = $page<br>
username = $username<br>
password = $password<br>
referer = $ENV{'HTTP_REFERER'}<br>
query string = $ENV{'QUERY_STRING'}<br>
</center>
</body>
</html>
};
}
sub continuePage
{
print qq{
<html>
<head>
<title>Welcome!</title>
<body>
<center>
<br>
<a href="enter.html">Continue...</a>
<br>
<br>
</center>
</body>
</html>
};
}
#-----------------------------------
#-------------------------------------
#!c:\perl -w
use strict;
use CGI::Carp qw(fatalsToBrowser);
use URI::URL;
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Request::Common;
use HTTP::Request::Form;
use HTML::TreeBuilder 3.0;
my $ua = LWP::UserAgent->new;
my $url = url 'my $res = $ua->request(GET $url);
my $tree = HTML::TreeBuilder->new;
$tree->parse($res->content);
$tree->eof();
my @forms = $tree->find_by_tag_name('form');
die "What, no forms in $url?" unless @forms;
my $f = HTTP::Request::Form->new($forms[0], $url);
$f->field("username" , "user"
$f->field("password" , "pass"
$f->field("page","2"
my $response = $ua->request($f->press("submit"
print $response->content if $response->is_success;
exit;
#-------------------------------
Just for reference, here is the 'form' that I am trying to submit with the above script. It is actually a Perl CGI so you can see what is required to get a valid submission. HTTP_REFERER must be from my domain and QUERY_STRING must be blank. A cookie is set once there is a valid form submission.
#-------------------------
#!c:\perl -w
use strict;
use CGI;
use CGI::Cookie;
use CGI::Carp qw(fatalsToBrowser);
my $query = new CGI;
#-------------- Global Variables ----------------
my $DOMAIN = ".globalnamespace.com";
my $username = $query->param('username') || '';
my $password = $query->param('password') || '';
my $page = $query->param('page');
#------------------------------------------------
#--------------- Main Program -------------------
if ($page eq ""
{
displayLoginPage();
exit;
}
elsif ($page eq "2"
{
if(!(checkReferer()))
{
print "Content-type: text/html\n\n";
print "Breakin detected!!!<br>\n";
print qq{
page = $page<br>
username = $username<br>
password = $password<br>
referer = $ENV{'HTTP_REFERER'}<br>
query string = $ENV{'QUERY_STRING'}<br>
};
displayLoginPage();
exit;
}
if(!(verifyUser()))
{
print "Content-type: text/html\n\n";
print "That didn\'t work!<br>\n";
print qq{
page = $page<br>
username = $username<br>
password = $password<br>
referer = $ENV{'HTTP_REFERER'}<br>
query string = $ENV{'QUERY_STRING'}<br>
};
exit;
}
else
{
setVerCookie();
continuePage();
exit;
}
exit;
}
else
{
exit;
}
#------------------------------------------------
sub checkReferer
{
my $params =lc($ENV{'QUERY_STRING'});
$ENV{'HTTP_REFERER'} =~ s|.*(globalnamespace.com).*||i;
if(($params eq '')&&($1 ne ''))
{
return(1);
}
else
{
return(0);
}
}
sub verifyUser
{
if(($username eq 'user')&&($password eq 'pass'))
{
return(1);
}
else
{
return(0);
}
}
sub setVerCookie
{
## Set a Domain Cookie with no expiration date - expires on browser close
print qq{Set-Cookie: mycookie=set; domain=$DOMAIN; path=/;\n};
}
sub displayLoginPage
{
print qq
{
<html>
<head>
<title>Login</title>
</head>
<body>
<center>
**Please ensure that Javascript and Cookies are enabled**<br><br>
Please enter your Username and Password to Login:<br>
<br>
<form action="$ENV{'SCRIPT_NAME'}" method="post">
Username: <font face="courier" size='1'><input type="text" size=10 name="username"></font>
<br><br>
Password: <font face="courier" size='1'><input type="password" size=10 name="password"></font>
</font>
<br><br>
<input type="hidden" name="page" value="2">
<input type="submit" name="submit" value=" Login ">
</form>
page = $page<br>
username = $username<br>
password = $password<br>
referer = $ENV{'HTTP_REFERER'}<br>
query string = $ENV{'QUERY_STRING'}<br>
</center>
</body>
</html>
};
}
sub continuePage
{
print qq{
<html>
<head>
<title>Welcome!</title>
<body>
<center>
<br>
<a href="enter.html">Continue...</a>
<br>
<br>
</center>
</body>
</html>
};
}
#-----------------------------------