Website log-in with Perl and Mechanize

msikd65 picture msikd65 · May 20, 2011 · Viewed 10.4k times · Source

So this is driving me crazy. Basically, when I hard-code my user name and password, I can log-in no problem. But I want to prompt the user to enter the username and password, as I would like to share this program with others. (the program is supposed to log into our courses site and download all of our course work info - lectures, hw, etc)

This code works:

use WWW::Mechanize;
use LWP;

my $username = 'user'; 
my $password = 'pass';

my $mech = WWW::Mechanize->new();
$mech -> cookie_jar(HTTP::Cookies->new());
$mech -> get('log-in url');
$mech -> form_name('theform');
$mech -> field ('username' => $username);
$mech -> field ('password' => $password);
$mech -> click ('log in');
print $mech-> content();

however, when I try and prompt the user to enter log-in info, it does now work. printing content returns the html of the log-in page, not the following page (courses page for said user)

use LWP;
use WWW::Mechanize;

my $login_url = 'log-in url';
print "\nUser name: ";
my $username = <>;
print "Password: ";
my $password = <>;

my $mech = WWW::Mechanize->new();
$mech -> cookie_jar(HTTP::Cookies->new());
$mech -> get($login_url);
$mech -> form_name('theform');
$mech -> field ('username' => $username);
$mech -> field ('password' => $password);
$mech -> click ('log in');
print $mech-> content();

this really makes no sense since they are essentially the same thing. I even typed in the username/password in quotes in the prompt and still no avail..... (i realize also that it wont be very easy to check without a website and log-in info, sorry about that)

Answer

CanSpice picture CanSpice · May 20, 2011

You need to run chomp() on the input from the user:

my $username = <>;
chomp($username);

The text supplied by the user has a carriage return at the end, which is screwing up your login.