在WWW设置基本身份验证凭据::机械化(Setting basic authentication c

2019-09-27 13:39发布

我在使用基本身份验证有麻烦WWW ::机械化 。 我试图连接到Streak的API ,为此,文件规定:

条纹使用HTTP基本验证签署与您的API密钥每个请求。 只需设置请求API密钥的用户名。 密码字段被忽略。 所有请求都必须通过HTTPS进行的HTTP请求将被忽略。

下面是一个示例请求:

curl https://www.streak.com/api/v1/pipelines -u YOUR_API_KEY:

我可以用成功访问API curl以这种方式。 但是,我不能使用WWW ::机械化认证成功。 下面是我得到了什么:

#!perl

use warnings;
use strict;
use feature 'say';

use WWW::Mechanize;

my $api = 'https://www.streak.com/api/v1/';

my $mech = WWW::Mechanize->new( autocheck => 0 ); # don't die on errors

$mech->credentials('my API key here', '');

$mech->get($api . 'pipelines');

say $mech->response->status_line;
say $mech->res->request->as_string;

运行我的代码获取:

401 Unauthorized
GET https://www.streak.com/api/v1/pipelines
Accept-Encoding: gzip
User-Agent: WWW-Mechanize/1.83

验证没有甚至正在尝试。 任何人都可以说明为什么这可能是这种情况,什么我可以做些什么来解决这个问题? 此代码是在草莓的Perl 5.24.0.1运行时,如果可能有什么关系呢。

[编辑,包括从检查请求对象的simbabque建议。]

Answer 1:

我发现这个问题。

继在技术这个职位上的Perl的Maven (“如何找出网址和境界?”),事实证明,API不发送挑战凭据,指定一个境界,当你尝试连接到它。 它只是给你一个错误信息,指出基本身份验证是必需的。 LWP :: UserAgent的不知道做任何事情在这一点别的。

所以,我复制从simbabque建议检查,并手动设置该用户代理对象上的成功的卷曲请求认证头:

$ua->default_header('Authorization' => 'Basic [Base64-encoded string here]');

现在,它的工作原理。 欢乐时光。



文章来源: Setting basic authentication credentials in WWW::Mechanize