Link to home
Start Free TrialLog in
Avatar of mactfines
mactfinesFlag for Afghanistan

asked on

New with libwww-perl and am stuck trying to POST a form.

I am new to libwww perl, and am trying to POST a request, and I am just frustrating myself at this point.

I am trying to write a UA (User Agent) to login to our Barracuda anti-spam box so it can gather some stats.

I can access the initial URL where the login screen is.  I can gather and populate the form fields using HTML::Form.  But when I try to POST the filled out form back, I always get a 302 result code ("Moved").  This happens whether I use the correct or incorrect password.  The 'Content' string LWP is passing back looks the same as the one I grabbed with a packet sniffer when I accessed the system with my browser.

I could just use some help in figuring this out.  Let me know what else would be useful to post and I'll post it.

Thanks!
#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use HTML::Form;
 
my $p;
my $domain       = 'macalester.edu';
my $barracuda    = "barracuda.$domain";
my $cookies      = "/tmp/$barracuda";
my $from         = "fines\@$domain";
my $proto        = 'http';       # change to 'https' if using https
my $url          = "$proto://$barracuda/cgi-bin/index.cgi";
my $user = 'admin';
my $password='secret';
 
$p->{host}       = "$proto://$barracuda";
$p->{timeout}    = 60;
$p->{agent}      = 'LWP 5.808';
my $ua = LWP::UserAgent->new;
$ua->timeout($p->{timeout});
 
my $response = $ua->get($url);
if ($response->is_success) {
    print $response->content;  # or whatever
} else {
    die $response->status_line;
}
print "code is " . $response->code . "\n";
print "message is " . $response->message . "\n";
 
my @forms = HTML::Form->parse($response);
my $form=$forms[0];
print "this form has this many inputs: " . $form->inputs . "\n";
$form->value('user',$user);
$form->value('password',$password);
my $enc_key=$form->value('enc_key');
my $et=$form->value('et');
 
my $request=$form->click;
$request->header(Host => '141.140.1.35');
print "content is " . $request->content . "\n";
my $c=$request->content;
$c .= "&password_entry=";
$request->content($c);
$request->header('Content-length' => length($c));
$request->protocol('HTTP/1.1');
$request->header('User-Agent' => $p->{agent});
$request->header('Accept' => 'text/html');
print "content is " . $request->content . "\n";
print "request is:\n" . $request->as_string . "\n";
$response=$ua->request($request);
print "code is " . $response->code . "\n";
print "message is " . $response->message . "\n";

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of FishMonger
FishMonger
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Forced accept.

Computer101
EE Admin