TCM has asked for the wisdom of the Perl Monks concerning the following question:

I'd like to write a script that will go to an https website, login with a username and password and then upload a file. So the first thing I'm trying to do is actually log into the site using LWP::UserAgent. I created the code below to accomplish this, but it doesn't actually login to the site. I can see that I get a "200 OK" response from "$response->status_line", and it appears that I am on the login page of the site (based on what I'm seeing from "$response->as_string"), but it never actually logs in. So it looks to me like I'm on the login page, but I'm not sure how to actually login. I've read the LWP::UserAgent manpage many times over (and also other links from that manpage), but it's just not sinking in to this thick skull of mine. Anyone mind helping me out with this next step?

#!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use Data::Dumper; my $https_login = 'https://some.httpssite.com'; my $https_user = 'username'; my $https_pass = 'password'; my $ua = LWP::UserAgent->new(); $ua->protocols_allowed( [ 'https'] ); # login to https site my $response = $ua->post($https_login, [ 'user' => "$https_user",'password' => "$https_pass" ] ); if ($response->is_error()) { printf " %s\n", $response->status_line; print "https request error!\n"; } else { printf " %s\n", $response->status_line; print Dumper ($response->as_string); }

Replies are listed 'Best First'.
Re: Unable to log into secure website using LWP::UserAgent
by no_slogan (Deacon) on Feb 18, 2014 at 16:21 UTC

    You'll probably need to set a cookie jar.

    $ua->cookie_jar( {} );

      I've added code for cookies to the script, but other than the file ".lwp_cookies.txt" that is now being created, the results are the same. Still looks like I am not actually loging in, but rather remaining on the login page (even though I get a "200 OK" response from "$response->status_line"). I've included the new script below, does my cookie code look correct? The ".lwp_cookies.txt" file does contain two Set-Cookie3: headers in it. Any other suggestions? Thank you all for your time.

      #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use Data::Dumper; use HTTP::Cookies; my $https_login = 'https://some.httpssite.com'; my $https_user = 'username'; my $https_pass = 'password'; my $ua = LWP::UserAgent->new(); $ua->protocols_allowed( [ 'https'] ); $ua->cookie_jar(HTTP::Cookies->new(file => ".lwp_cookies.txt",autosave + => 1)); # login to https site my $response = $ua->post($https_login, [ 'user' => "$https_user",'password' => "$https_pass" ] ); if ($response->is_error()) { printf " %s\n", $response->status_line; print "https request error!\n"; } else { printf " %s\n", $response->status_line; print Dumper ($response->as_string); }

        Hi TCM I am also facing the same issue my code is the below one I am getting authentication failed.

        #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use HTTP::Request::Common; use HTTP::Cookies; my $user=""; my $pass=""; my $url="http://news.bankofamerica.com/EOS/EosDispatcher"; # define user agent my $ua=LWP::UserAgent->new(); $ua->agent("USER/AGENT/IDENTIFICATION"); # make request my $request=HTTP::Request->new(GET=>$url) or die "request failed : $!" +; # authenticate $request->authorization_basic($user,$pass") or die "Authorisation fail +ed : $!"; # expect response my $response= $ua->request($request); print $response->content();