Perl WWW ::机械化 - 身份验证错误获取URL

问题描述:

我想使用Perl的Mechanize库填写Web表单。Perl WWW ::机械化 - 身份验证错误获取URL

只要我在搜索框中输入URL,它就会提示下面的消息,我可以手动登录成功。

enter image description here

然而,当我运行下面的脚本,我得到以下错误:

enter image description here

如何正确地在第一个身份验证对话框证书使用我$mech对象填写?

my $mech = WWW::Mechanize->new('keepalive' => 1); 

my $url = "http://URL/I/NEED/TO/ACCESS"; 
my $username = "username"; 
my $password = "password"; 

$mech->credentials($username, $password); 
$mech->get($url);   <----------------- ERROR (LINE 93) 

编辑:

这里是请求站点

--2013-08-30 11:16:17-- http://moss.micron.com/MFG/ProbeTest/Lists/Manufacturing%20Requests/AllItems.aspx 
Resolving moss.micron.com... 137.201.88.118 
Connecting to moss.micron.com|137.201.88.118|:80... connected. 
HTTP request sent, awaiting response... 
    HTTP/1.1 401 Unauthorized 
    Server: Microsoft-IIS/7.0 
    WWW-Authenticate: Negotiate 
    WWW-Authenticate: NTLM 
    X-Powered-By: ASP.NET 
    MicrosoftSharePointTeamServices: 12.0.0.6341 
    Date: Fri, 30 Aug 2013 17:16:17 GMT 
    Connection: keep-alive 
    Content-Length: 0 
Authorization failed. 
+0

您正在使用什么版本的机械? – Nate

+0

如何检查当前版本? –

+0

刚刚检查。我正在使用VERSION 1.70 –

上运行wget与旧版本机械化的结果,你可以继承的WWW::Mechanize包,并提供自己的凭据程序:

package MyMech; 

use vars qw(@ISA); 
@ISA = qw(WWW::Mechanize); 

sub get_basic_credentials { 
    my ($self, $realm, $uri) = @_; 
    return("user", "password"); 
} 

然后在你的程序中使用这个包,而不是WWW的::机械化:

package main; 

my $mech = MyMech->new(); 
$mech->get($url); 

更新

你已经更新了你的问题,表示NTLM身份验证的要求。检查CPAN上的LWP::Authen::Ntlm

+0

默认凭据例程有什么问题?它看起来与你建议覆盖的那个一样 –

+0

我不再接收连接错误,但它似乎不像Mech代理正确地获取网页。即使我删除了'get_basic_credentials'子例程,它似乎允许我获取url(这是可疑的)。此外,当我尝试转储$ mech-> forms –

+0

@ user1022944中的表单时,没有任何内容显示,没有错误的默认凭据例程。但几年前,我开始使用这种模式,这种模式在其他技术失败时也可以使用另请注意,这适用于HTTP基本身份验证,而不是摘要身份验证。作为你的问题的一部分,我建议你运行wget并粘贴一个输出的副本(所以我们可以看到你网站的头文件):'wget -O/dev/null -S http://www.bbc.co.uk /'(但用您正在提取的URL替换BBC)。 –