Perl WWW ::机械化 - 身份验证错误获取URL
我想使用Perl的Mechanize库填写Web表单。Perl WWW ::机械化 - 身份验证错误获取URL
只要我在搜索框中输入URL,它就会提示下面的消息,我可以手动登录成功。
然而,当我运行下面的脚本,我得到以下错误:
如何正确地在第一个身份验证对话框证书使用我$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.
上运行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。
默认凭据例程有什么问题?它看起来与你建议覆盖的那个一样 –
我不再接收连接错误,但它似乎不像Mech代理正确地获取网页。即使我删除了'get_basic_credentials'子例程,它似乎允许我获取url(这是可疑的)。此外,当我尝试转储$ mech-> forms –
@ user1022944中的表单时,没有任何内容显示,没有错误的默认凭据例程。但几年前,我开始使用这种模式,这种模式在其他技术失败时也可以使用另请注意,这适用于HTTP基本身份验证,而不是摘要身份验证。作为你的问题的一部分,我建议你运行wget并粘贴一个输出的副本(所以我们可以看到你网站的头文件):'wget -O/dev/null -S http://www.bbc.co.uk /'(但用您正在提取的URL替换BBC)。 –
您正在使用什么版本的机械? – Nate
如何检查当前版本? –
刚刚检查。我正在使用VERSION 1.70 –