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

Merry Christmas!

In my Perl helps Tomcat, I said that one thing I wanted to do was to use LWP::UserAgent, instead of forming HTPP request and doing socket calls myself.

But I am having some problem with the credentials() call with UserAgent. My expectation was that UserAgent will take whatever I specified with credentials() call, and add Authorization to the HTTP request, as what I did oringially. But either I had the wrong expectation, or I used credentials() in a wrong way, it does not work for me (my oringinal script works). Here is my attempt:

use LWP::UserAgent; use HTTP::Request; use strict; use warnings; my $ua = new LWP::UserAgent(); $ua->credentials("http://localhost:8080/", "Basic", "peip", "930612"); my $req; if ($ARGV[0] eq "remove") { $req = new HTTP::Request("GET", "http://localhost:8080/manager/rem +ove?path=/hello1"); } elsif ($ARGV[0] eq "install") { $req = new HTTP::Request("GET", "http://localhost:8080/manager/ins +tall?path=/hello1&war=jar:file:/jwsdp/webapps/jwstutorial13/examples/ +web/hello1/dist/hello1.war!/"); } my $res = $ua->request($req); print $res->content();

Update:

Checked the source code of LWP::UserAgent. It looks like LWP::UserAgent does not send out Authorization in its first request. Instead it waits for the server to send back a response to challenge. Tomcat obviously responsed with the correct code: 401. I am now checking why LWP::UserAgent didn't response to 401.

Replies are listed 'Best First'.
Re: problem with credentials() of LWP::UserAgent
by pg (Canon) on Dec 25, 2003 at 02:33 UTC

    Traced into LWP::UserAgent, and finally figured out that the parameters I passed into the credentials() call are wrong. Here is the fixed code:

    use LWP::UserAgent; use HTTP::Request; use strict; use warnings; my $ua = new LWP::UserAgent(); $ua->credentials("localhost:8080", "Tomcat Manager Application", "peip +", "930612"); my $req; if ($ARGV[0] eq "remove") { $req = new HTTP::Request("GET", "http://localhost:8080/manager/rem +ove?path=/hello1"); } elsif ($ARGV[0] eq "install") { $req = new HTTP::Request("GET", "http://localhost:8080/manager/ins +tall?path=/hello1&war=jar:file:/jwstutorial13/examples/web/hello1/dis +t/hello1.war!/"); } my $res = $ua->request($req); print $res->content();

    I will continue work on it, to add Tk and XML parts. But first... Hey, my turkey is done!

      Nice to see such a quick solution by the OP. Good luck on the other parts.

      Merry Chrustmas to all,

      xenchu


      The Needs of the World and my Talents run parallel to infinity.