Perl WWW::Mechanize方法在AIX中不起作用

Perl WWW::Mechanize方法在AIX中不起作用,perl,cpan,aix,www-mechanize,Perl,Cpan,Aix,Www Mechanize,我有一个简单的要求,即屏幕抓取一个网页(简单的基于URL的报告),并将HTML响应指向一个输出文件。但是,URL将重定向到具有“基于表单”身份验证(无javascript)的身份验证(HTTPS登录)页面,在身份验证后,我尝试查看的报告应显示在$response(作为HTML)中。有趣的是,我的代码在Windows机器上运行得很好,但是下面的代码在AIX机器上不起作用,看起来click\u button()函数调用什么都不做。我已经尝试了click(),submit(),但是都没有成功,所以我得

我有一个简单的要求,即屏幕抓取一个网页(简单的基于URL的报告),并将HTML响应指向一个输出文件。但是,URL将重定向到具有“基于表单”身份验证(无javascript)的身份验证(HTTPS登录)页面,在身份验证后,我尝试查看的报告应显示在
$response
(作为HTML)中。有趣的是,我的代码在Windows机器上运行得很好,但是下面的代码在AIX机器上不起作用,看起来
click\u button()
函数调用什么都不做。我已经尝试了
click()
submit()
,但是都没有成功,所以我得到的不是实际的报告,而是HTML输出文件中的登录屏幕。有什么想法,有什么不对劲吗

use WWW::Mechanize;
use strict;

my $username = "admin";
my $password = "welcome1";  
my $outpath  = "/home/data/output";
my $fromday = 7;
my $url  = "https://www.myreports.com/tax_report.php";
my $name = "tax_report";
my $outfile = "$outpath/$name.html";

my $mech = WWW::Mechanize->new(noproxy =>'0');  

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900; 
$mon++;     # since it will start from 0
$mday--;    # yesterdays date (to day)
$fromday = $mday - $days; #(from day)

#Create URL extension for generating report with previous date
my $dt_range = "?Y&dc_date1=$mon%2F$fromday%2F$year&dc_date2=$mon%2F$mday%2F$year"; 
my $url  = $url . $dt_range;

$mech->get($url);
$mech->field(login => "$username");
$mech->field(passwd => "$password");

$mech->add_handler("request_send",  sub { shift->dump; return });
$mech->add_handler("response_done", sub { shift->dump; return });

$mech->click_button(value=>"Login now");

my $response = $mech->content();

print "Generating report: $name...\n";

open (OUT, ">>$outfile")|| die "Cannot create report file $outfile";
print OUT "$response";
close OUT;
这两台机器中的WWW::Mechanize版本相同,即1.54,但是Win机器的perl版本是5.10.1,而AIX机器的perl版本是5.8.8

使用的其他替代方案-

my $inputobject=$mech->current_form()->find_input( undef,'submit' );
print $inputobject->value . "\n";
$mech->click_button(input => $inputobject);
print $mech->status() . "\n";
$inputobject显示HTML源代码中正确的按钮元素,第二次打印返回的状态为200,显然代表OK。但是它在AIX机器中仍然不起作用

更新-我尝试连接的站点似乎有一个不受信任的SSL证书。我在Windows PC、Mac和AIX三台不同的机器上尝试了这个程序。在Windows机器上,程序运行正常,我可以通过浏览器(Chrome、Firefox、IE)登录到网站。但是,在Mac中,登录无法工作(通过浏览器),并且显示不受信任的证书错误(或警告!),这可能意味着未设置代理设置,Perl程序也无法工作。最后是AIX,其中Perl也不能正常工作。不确定如何在此处绕过此不受信任的SSL证书问题。任何帮助都将不胜感激

UPDATE2:包含在脚本的以下代码行中,以查看日志详细信息,并发现由于我的IP已被服务器防火墙过滤,因此正在重新定向(HTTP 302)。一旦将AIXIP添加到服务器的防火墙异常中,脚本就可以正常工作。下面的两行是救生圈-

$mech->add_handler("request_send",  sub { shift->dump; return });
$mech->add_handler("response_done", sub { shift->dump; return });

my$mech=WWW::Mechanize->new(noproxy=>'0')之前,您可以使用以下行吗并重试

$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME}=0;

Daxim,我已经尝试了noproxy=>0,但它不起作用。今天早上我发现的另一件事是,“POST”在AIX机器中返回“HTTP/1.1 302 found”,在Windows机器中,相同的代码和相同的URL返回“HTTP/1.1 200 OK”。不知道它想重新指向哪里。