http://www.perlmonks.org?node_id=99427


in reply to LWP Authorization Problem

(from comp.lang.perl.modules)

As usual, there's more than one way to do it.

1. Use the credentials method of the LWP::UserAgent object:

$ua->credentials($netloc, $realm, $uname, $pass)

Eg: Say your URL is http://www.somesite.com/page.html and when you try this with your browser, it pops up a box saying 'Enter username and password for XYZ'.

$netloc in this example is 'www.somesite.com' and $realm in this case is 'XYZ'.

2. Call the authorization_basic method of your HTTP::Request object before passing it to the LWP::UserAgent's request method:

$request->authorization_basic($uname, $pass);

If you use method 1, the LWP::UserAgent will send one request which the server will reject with a 401 error. One of the headers in the 401 response will be the realm. The LWP::UserAgent will then look up it's internal table (populated by your calls to credentials) to find a matching netloc and realm. If this lookup returns a username and password, the LWP::UserAgent will resend the request with a basic authorization header.

The second method allows you to set the username and password before making the initial request - assuming you supply the right credentials there will be no 401 error. There is no need to specify netloc and realm, as they are only used by the LWP::UserAgent's lookup routine.

'perldoc LWP::UserAgent' will tell you more about 1

'perldoc HTTP::Message' will tell you more about 2 (HTTP::Request is derived from HTTP::Message).


--twerq