使用perl登录https站点

时间:2012-02-16 19:19:16

标签: javascript perl login https mechanize

我正在尝试编写一个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();

3 个答案:

答案 0 :(得分:2)

  

浏览器显示一个弹出框

这是HTTP身份验证,在RFC 2617中有所描述,并记录在WWW::MechanizeLWP::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字符。