Невозможно вызвать метод "request" для неопределенного значения в /usr/share/perl5/LWP/UserAgent.pm строке 563 - PullRequest
0 голосов
/ 07 марта 2012

В моем скрипте perl я хочу остановить страницу перенаправления, установив $ mech-> redirect_ok (0);Но я получаю следующую ошибку: - Невозможно вызвать метод «request» для неопределенного значения в строке /usr/share/perl5/LWP/UserAgent.pm 563

Программа perl для вашегоссылка.

#!/usr/bin/perl -w

use utility;
use WWW::Mechanize;

$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
binmode(STDOUT, ":utf8");

my $mech = WWW::Mechanize->new( autocheck => 1 );

my $num_args = $#ARGV + 1;
if ($num_args != 2) {
  print "\nUsage: ./my_script.pl username password\n\n";
  exit;
}

my $username = $ARGV[0];
my $password = $ARGV[1];

$username = main::trim ($username);
$password = main::trim ($password);

$mech->credentials( $username => $password );
$mech->redirect_ok(0);
$mech->get( '<home page of the web address>.jspa' );
print $mech->content();

Пожалуйста, предложите ....

1 Ответ

2 голосов
/ 07 марта 2012

redirect_ok - это функция обратного вызова, вызываемая внутренне LWP для определения допустимости определенного перенаправления.Он используется подклассами LWP и перегрузкой redirect_ok для выполнения более сложных тестов по запросу и ответу.

Метод принимает два параметра: HTTP::Request и HTTP::Response.Вы передаете ноль как HTTP::Request и undef как HTTP::Response.Ноль бесполезен в качестве параметра для пользовательского агента request, поэтому программа аварийно завершает работу.

Мне не совсем ясно, для чего нужно, но для отключения всех перенаправлений следует использовать метод requests_redirectable, который принимаетсписок типов HTTP-запросов, действительных для перенаправления.По умолчанию он установлен как

$mech->requests_redirectable([qw/ GET HEAD /]);

, поэтому перенаправление POST будет отклонено.Чтобы предотвратить перенаправление всех типов запросов, передайте пустой список, подобный этому

$mech->requests_redirectable([]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...