Perl WWW:: Механизировать методы, не работающие в AIX

У меня есть простое требование скрепления экрана веб-страницей (простые отчеты на основе URL) и перенаправления ответа HTML в выходной файл. Тем не менее, URL будет перенаправлен на страницу аутентификации (HTTPS Login) с аутентификацией на основе форм (без JavaScript), и после аутентификации отчет, который я пытаюсь просмотреть, должен появиться в $response (как HTML). Интересно, что мой код работает на Windows-машине просто отлично, однако тот же код ниже не работает на AIX-машине и выглядит как click_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, но версия perl для Win-машины - 5.10.1, а версия Perl для AIX-машины - 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, которое, очевидно, означает "ОК". Но его все еще не работает в машине AIX.

ОБНОВЛЕНИЕ - Кажется, что сайт, к которому я пытаюсь подключиться, имеет недоверенный сертификат SSL. Я попробовал программу на трех разных машинах Windows PC, Mac и AIX. На Windows Machine программа работает, и я смог войти на сайт через браузеры (Chrome, Firefox,IE). Однако в Mac вход в систему просто не будет работать (через браузеры), и он показывает ошибку недоверенного сертификата (или предупреждение!), Это, вероятно, означает, что настройки прокси не установлены, программа Perl также не будет работать. И, наконец, AIX, где Perl также не работает. Не уверен, как обойти эту проблему ненадежных сертификатов SSL здесь. Любая помощь будет оценена.

ОБНОВЛЕНИЕ 2: Включено ниже строк кода в сценарий, чтобы увидеть подробности регистрации и обнаружил, что меня перенаправили (HTTP 302), так как мой IP был отфильтрован брандмауэром сервера. Как только AIX ip был добавлен в исключение брандмауэра сервера, скрипт работал отлично. Две строки ниже были спасением жизни

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

1 ответ

Можете ли вы использовать следующую строку перед my $mech = WWW::Mechanize->new(noproxy =>'0'); вашего Perl-кода и попробуйте еще раз?

$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME}=0;
Другие вопросы по тегам