views:

520

answers:

3

I would like to write a script to login to a web application and then move to other parts of the application:

use HTTP::Request::Common qw(POST);
use LWP::UserAgent;
use Data::Dumper;

$ua = LWP::UserAgent->new(keep_alive=>1);

my $req = POST "http://example.com:5002/index.php",
[ user_name     => 'username',
  user_password => "password",
  module        => 'Users',
  action        => 'Authenticate',
  return_module => 'Users',
  return_action => 'Login',
];

my $res = $ua->request($req);
print Dumper(\$res);
if ( $res->is_success ) {
    print $res->as_string;
}

When I try this code I am not able to login to the application. The HTTP status code returned is 302 that is found, but with no data.

If I post username/password with all required things then it should return the home page of the application and keep the connection live to move other parts of the application.

+8  A: 

I'm guessing that LWP isn't following the redirect:

push @{ $ua->requests_redirectable }, 'POST';

Any reason why you're not using WWW::Mechanize?

bic72
+13  A: 

You want WWW::Mechanize.

Sinan Ünür
+1  A: 

I've used LWP to log in to plenty of web sites and do stuff with the content, so there should be no problem doing what you want. Your code looks good so far but two things I'd suggest:

  1. As mentioned, you may need to make the requests redirectable
  2. You may also need to enable cookies: $ua->cookie_jar( {} );

Hope this helps

Auctionitis