0

我在通过 Perl 对网站进行身份验证时遇到了一些问题。我可以使用浏览器毫无问题地登录该网站,如果我这样做了,它会向我显示一个小提示,我必须在其中提供我的凭据。随和!

但是现在我想使用脚本连接到该站点,但我总是遇到 401 未经授权的错误。

我尝试连接的服务器运行 IIS7 并且 WWW-Authenticate 标头告诉我,该领域将类似于“协商,NTLM”(我尝试了所有三种可能性,其中一个或两个都没有发生)。

到目前为止,我真的不知道如何弄清楚需要什么信息,我最后一次尝试是获取表单,我必须在其中提供凭据,然后使用 submit_form 函数,但是要获取表单,我必须建立连接。

我真的很困惑,因为我尝试了我在 google 上找到的大部分东西,但我不知道发生了什么,特别是从技术角度来看,这可以给我一个提示。

好吧,如果有人可以帮助我,我将非常感激,我提前感谢您这样做。

#!/usr/bin/perl

use strict;
use warnings;
use LWP::UserAgent;
use WWW::Mechanize;
use Authen::NTLM;

my $url = "some.url";
my $usr = 'bernd';
my $pwd = 'bernd';

my $mech = WWW::Mechanize->new(ssl_opts => {verify_hostname => 0});
$mech -> credentials($url.":443","NTLM",$usr,$pwd);

$mech->get("https://".$url); #added the https, because $url doesn't have it
print $mech->forms;

PS:绕过ssl验证是因为我一开始遇到的证书问题。

4

2 回答 2

0

好吧,问题似乎不是脚本或 Perl 问题,该站点的一些开发人员在权限方面做得非常糟糕,因此您必须获得查看其他所有内容的授权,才能查看单个站点和我被告知要使用的服务帐户没有此权限。

非常难过,但感谢到目前为止的帮助!

于 2013-08-12T07:21:32.017 回答
0

我推测您在使用方法的4参数形式时credentials,netloc和user是错误的。

当 URL 为https://www.example.com/foo/bar?quux;baz=42#fnord时,netloc 为www.example.com:443.

用户是 NTLM 域、单个反斜杠和 NTLM 用户名的字符串,例如internal\bernd. 请注意,如果您像在示例中那样将该值硬编码为字符串文字,则需要使用反斜杠转义反斜杠

检查这些可能的错误。

于 2013-08-09T08:39:12.183 回答