我正在尝试编写一个perl脚本来登录受密码保护的站点。我过去曾使用WWW :: Mechanize模块执行类似的任务,但是这个网站在几个方面有所不同:
- 它在受保护的页面上使用javascript,因此机械化将无法正常工作。我喜欢用无头浏览器实现一些东西,因为脚本每小时在我的工作机器上运行。
- 它没有登录表单,而是浏览器显示一个弹出框来登录,我不能为我的生活找出如何处理它。
网址:https://fwxwww2.hpr.for.gov.bc.ca/Scripts/Public/Common/Report.asp?Report=Hourly
我已经找到了足够的资源来登录后如何继续使用javascript,所以它真的只是如何验证这让我感到难过。提前感谢有关如何处理此问题的任何建议。我对那些不涉及perl的解决方案持开放态度,但我正在运行cygwin,因此选项有限。
#!/usr/bin/perl
use strict;
use warnings;
use WWW::Mechanize;
use Data::Dumper;
my $url= 'https://fwxwww2.hpr.for.gov.bc.ca/Scripts/Public/Common/Report.asp?Report=Hourly';
my $mech = WWW::Mechanize->new( autocheck => 1 );
$mech->credentials(
'myusername',
'mypassword'
);
$mech->get( $url );
print $mech->content();
答案 0 :(得分:2)
浏览器显示一个弹出框
这是HTTP身份验证,在RFC 2617中有所描述,并记录在WWW::Mechanize
和LWP::UserAgent
中的方法credentials
中。
我认为没有涉及JavaScript。也许只有在认证后的文件中。查看我的documentation improvement for JS-enabled Mech-workalikes。
修改强>
Antonio Dolcetta's answer给出了使用NTLM身份验证方案的提示。升级您的Authen::NTLM版本。根据{{3}}文档,启用keep-alive并对netloc(包括端口号)和用户名(包括NT域名)使用正确的表示法。
答案 1 :(得分:1)
看起来该网站正在使用NTLM进行身份验证。 确保安装了LWP :: Authen :: Ntlm。 尝试这样的事情(这个例子使用LWP :: UserAgent而不是WWW :: Mechanize,但应该是相同的)
另见:http://www.perlmonks.org/?node_id=642656
#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
my $url = 'https://fwxwww2.hpr.for.gov.bc.ca/Scripts/Public/Common/Report.asp?Report=Hourly';
# important to use keep_alive for NTLM
my $ua = LWP::UserAgent->new(keep_alive=>1);
$ua->credentials('fwxwww2.hpr.for.gov.bc.ca', '', 'username', 'password');
my $response = $ua->get($url);
print $response->content();
答案 2 :(得分:0)
在启用实时http标头插件的情况下使用firefox。
通过这种方式,您可以看到进出的信息,并且您可以复制它。
此页面可能会检查其他不允许使用机器人的内容,例如浏览器版本检测,javascript检测等。
此外,您的$ url包含\ t字符。