Hi David The LWP::UserAgent docs isn't clear on how it handles the password. Thanks to your input, it's now clear why GitHub auth was failing.
As you have noted, "$token:x-oauth-basic" doesn't work. # Basic authorization user name can't contain ':' at /usr/share/perl5/HTTP/Message.pm line 658 I have now used authorization_basic() from HTTP::Header as you suggested, and bingo (problem resolved). This works $req->authorization_basic("$login", "$pass"); # works fine. It did like this either $req->authorization_basic("$user/token", "$token"); # Thanks for your input. Cheers Mimi On 31 July 2014 23:29, David Precious <dav...@preshweb.co.uk> wrote: > On Thu, 31 Jul 2014 17:01:38 +0100 > "mimic...@gmail.com" <mimic...@gmail.com> wrote: > > > I receive error when calling GitHub API from Perl (LWP). Basically, > > the problemis authentication failure, although the username and > > password combination is valid. > > > > In the code snippet below, I have tried changing the values passed to > > credentials() in several ways, however it does not work. > [...] > > my $auth_token = "username:token" > [...] > > my $ua = LWP::UserAgent->new; > > $ua->agent('Mozilla/8.0'); > > > > #$ua->credentials("www.github.com:443","Authorization: token", > > "$login", "$pass"); > > $ua->credentials("api.github.com:443","Authorization > > Basic:","$auth_token",""); > > The problem, I believe, is that LWP will send the details you've given > it for that hostname and realm, when it sends a request and the remote > server responds with a 401 Unauthorized response with a > WWW-Authenticate header, stating the auth type and realm. > Unfortunately, as you mentioned, GitHub does not do that; instead, it > pretends the resource requested does not exist. > > So, LWP, never being asked to authenticate, will not do so. > > You'll need to manually do it by creating a HTTP::Request object > rather than letting LWP do it for you. > > From some code of mine that successfully worked: > > my $url = "http://github.com/api/v2/json/pulls/" . $project; > my $ua = LWP::UserAgent->new; > my $req = HTTP::Request->new(GET => $url); > > # Auth if necessary > if (my $auth = $self->auth_for_project($project)) { > my ($user, $token) = split /:/, $auth, 2; > $req->authorization_basic("$user/token", "$token"); > } > > my $res = $ua->request($req) > or return "Unknown - error fetching $url"; > > > (this is from: > > https://github.com/bigpresh/Bot-BasicBot-Pluggable-Module-GitHub/blob/master/lib/Bot/BasicBot/Pluggable/Module/GitHub/PullRequests.pm#L67-L77 > ) > > ... reading it, though, I'm not sure quite why it worked; GitHub's docs > say that, if you're using a token, the username should be set as > "$token:x-oauth-basic", and the password being unimportant; maybe this > code worked against their older, now withdrawn v2 API. > > Anyway, I believe the lack of a proper WWW-Authenticate header from > GitHub is what's causing your problems - they don't ask for auth, so > LWP (correctly) doesn't send it. > > > -- > David Precious ("bigpresh") <dav...@preshweb.co.uk> > http://www.preshweb.co.uk/ www.preshweb.co.uk/twitter > www.preshweb.co.uk/linkedin www.preshweb.co.uk/facebook > www.preshweb.co.uk/cpan www.preshweb.co.uk/github > > > > -- > To unsubscribe, e-mail: beginners-unsubscr...@perl.org > For additional commands, e-mail: beginners-h...@perl.org > http://learn.perl.org/ > > >