Perl 每https身份验证失败

Perl 每https身份验证失败,perl,https,Perl,Https,我在通过Perl对网站进行身份验证时遇到一些问题。 我可以使用浏览器毫无问题地登录到该网站,如果我这样做,它会显示一个小提示,提示我必须提供我的凭据。 容易相处 但是现在我想使用脚本连接到该站点,我总是遇到一个未经授权的错误 我试图连接到的服务器运行IIS7,WWW Authenticate报头告诉我,该领域类似于“协商,NTLM”(我尝试了所有三种可能性,一种或两种,都没有发生任何事情) 到目前为止,我真的不知道如何找出所需的信息,我最后一次尝试是获取表单,我必须提供凭据,然后使用submit

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

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

我试图连接到的服务器运行IIS7,WWW Authenticate报头告诉我,该领域类似于“协商,NTLM”(我尝试了所有三种可能性,一种或两种,都没有发生任何事情)

到目前为止,我真的不知道如何找出所需的信息,我最后一次尝试是获取表单,我必须提供凭据,然后使用submit_form函数,但要获取表单,我必须建立连接

我真的很困惑,因为我尝试了在谷歌上找到的大多数东西,但我不知道发生了什么,特别是从技术角度,这可能给我一个提示

嗯,如果有人能帮助我,我会非常感激,我会提前感谢你的帮助

#!/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;
附言:
绕过ssl验证是由于我在开始时遇到的一个证书问题。

我推测,在您使用时,netloc和用户是错误的

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

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


检查这些可能的错误。

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


非常难过,但是谢谢你迄今为止的帮助

无法测试此程序。真正的URL是什么如果您不喜欢评论或答案,请不要删除您的问题。这让人们不愿意再次帮助你。我没有删除任何内容,不知道你的意思。问题是,这是一个内部url,我忘了提及。你问了,然后在得到答复后删除了。我对此很不高兴。页面仍然是。嗯,我不知道该说什么,我知道这听起来像是一个幼稚的借口,但我没有删除那篇帖子。我很困惑这怎么会发生,也许我应该避免让stackoverflow让我登录。我真的不知道,但我会记住你说的话,所以我不会犯错误。谢谢你的建议,我试图改变网址,但没有任何改变。对于反斜杠问题,我只使用了单引号“”,这应该足够了,不是吗?IIS是否可能需要一个特定的头来识别所提供的凭据类型?我想我读过一些关于apache和IIS之间巨大差异的文章。更改URL是错误的。您需要更改netloc,它是
凭证的第一个参数必须使用反斜杠转义反斜杠,即使在单引号字符串文字中也是如此。一定要阅读我链接到的文档。不,NTLM身份验证在IIS上的工作原理与在任何其他Web服务器上的工作原理相同。有
授权
代理授权
WWW-Authenticate
头,这些头在HTTP RFCs中都是标准化的。当您正确使用Mech/LWP时,所有这些工作都是透明的尝试将realm参数设置为空字符串。我按照您所说的做了所有操作,转义了反斜杠并清空了realm字段,这给了我以下错误:“必须启用keep_alive选项才能使NTLM身份验证工作。NTLM身份验证中止。”我阅读了有关ConnCache对象的内容,所以我创建了这样一个:
$agent->conn_缓存(LWP::ConnCache->new())但它告诉我它无法在包中找到它。这是另一个模块的一部分吗?