Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 在WWW::Mechanize中设置基本身份验证凭据_Perl_Authentication_Credentials_Www Mechanize_Strawberry Perl - Fatal编程技术网

Perl 在WWW::Mechanize中设置基本身份验证凭据

Perl 在WWW::Mechanize中设置基本身份验证凭据,perl,authentication,credentials,www-mechanize,strawberry-perl,Perl,Authentication,Credentials,Www Mechanize,Strawberry Perl,在中使用基本身份验证时遇到问题。我正在尝试连接到,其中的文档说明: Streak使用HTTP基本身份验证使用API密钥对每个请求进行签名。只需将请求的用户名设置为API密钥。密码字段被忽略。所有请求都必须通过HTTPS进行,因为HTTP请求将被忽略 以下是一个示例请求: curlhttps://www.streak.com/api/v1/pipelines -你的API密钥: 我可以以这种方式使用curl成功访问API。但是,我无法使用WWW::Mechanize成功进行身份验证。以下是我得到的

在中使用基本身份验证时遇到问题。我正在尝试连接到,其中的文档说明:

Streak使用HTTP基本身份验证使用API密钥对每个请求进行签名。只需将请求的用户名设置为API密钥。密码字段被忽略。所有请求都必须通过HTTPS进行,因为HTTP请求将被忽略

以下是一个示例请求:

curlhttps://www.streak.com/api/v1/pipelines -你的API密钥:

我可以以这种方式使用
curl
成功访问API。但是,我无法使用WWW::Mechanize成功进行身份验证。以下是我得到的:

#!perl
使用警告;
严格使用;
使用特征“说”;
使用WWW::Mechanize;
我的$apihttps://www.streak.com/api/v1/';
我的$mech=WWW::Mechanize->new(自动检查=>0);#不要为错误而死
$mech->credentials('my API key here','');
$mech->get($api.‘管道’);
说出$mech->response->status\u行;
说$mech->res->request->as\u string;
运行该代码可以获得:

401未经授权
得到https://www.streak.com/api/v1/pipelines
接受编码:gzip
用户代理:WWW.Mechanize/1.83
甚至没有尝试进行身份验证。有人能告诉我为什么会这样,我能做些什么来解决这个问题吗?这段代码运行在草莓Perl 5.24.0.1中,如果这可能与此有关的话

[编辑以包含simbabque关于检查请求对象的建议。]

我发现了问题

按照中的技术(“如何找到URL和领域?”),当您尝试连接到API时,API不会发送凭证质询,也不会指定领域。它只会给您一条错误消息,说明需要基本身份验证。LWP::UserAgent此时不知道做任何其他事情

因此,我从simbabque建议检查的成功curl请求复制了身份验证标头,并在user agent对象上手动设置该标头:

$ua->default_头('Authorization'=>'Basic[Base64编码字符串在此]);

现在它起作用了。快乐时光。

您是否将WWW::Mechanize创建的HTTP::Request对象与curl请求进行了比较?您可以使用
$mech->res->request->as_string
获取Perl方面的内容,并使用
curl-v
获取curl.interest。这表明它根本没有进行身份验证:
GEThttps://www.streak.com/api/v1/pipelines
接受编码:gzip
用户代理:WWW-Mechanize/1.83
我看到了同样的事情。很奇怪。如果你提供了一个更长的字符串,它也不会这样做。但我有使用此功能的代码。我们忽略了一些我相信的事情。我刚刚尝试了同样的事情,使用LWP::UserAgent而不是WWW::Mechanize,结果完全相同,很明显,这就是问题所在。当我了解更多信息时,我会更新。感谢你能理解并发布在这里。嘿,谢谢@xxfelixxx。希望这对其他任何使用WWW::Mechanize并遇到无法正确进行身份验证的资源的人都有用。事实证明,该API没有在401 Unauthorized消息中附带WWW Authenticate头,这违反了API。