我在WWW:机械化中使用基本身份验证时遇到了困难。我正在尝试连接到条纹API,该文档声明:
Streak使用来用API键对每个请求进行签名。只需将请求的用户名设置为API键即可。密码字段被忽略。所有请求都必须在HTTPS上进行,因为HTTP请求将被忽略。 下面是一个示例请求:
curl https://www.streak.com/api/v1/pipelines -u YOUR_API_KEY:
我可以以这种方式使用curl成功地访问API。但是,我无法使用WWW::Mechanize成功地进行身份验证。我要说的是:
#!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甚至没有尝试进行身份验证。有人能提出为什么会是这样,以及我能做些什么来解决这个问题吗?此代码在Strawberry Perl 5.24.0.1中运行,如果这可能与其有任何关系。
编辑包括来自审查请求对象的建议。
发布于 2016-11-04 11:02:38
我发现了问题。
按照这篇关于Perl Maven的文章中的技术(“如何查找URL和领域?”),当您尝试连接到它时,API不会发送凭据的挑战,指定一个领域。它只会给出一个错误消息,说明基本身份验证是必需的。LWP::UserAgent当时不知道做任何其他事情。
因此,我从simbabque建议检查的成功curl请求中复制身份验证标头,并在用户代理对象上手动设置它:
$ua->default_header('Authorization' => 'Basic [Base64-encoded string here]');现在起作用了。快乐时光。
https://stackoverflow.com/questions/40404920
复制相似问题