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/
>
>
>

Reply via email to