无法在/usr/share/perl5/LWP/UserAgent.pm第563行的未定义值上调用方法“request”

时间:2012-03-07 09:11:51

标签: perl web

在我的perl脚本中,我想通过设置$ mech-> redirect_ok(0)来停止重定向页面; 但我收到以下错误: - 无法在/usr/share/perl5/LWP/UserAgent.pm第563行的未定义值上调用方法“request”

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 个答案:

答案 0 :(得分:2)

redirect_ok是LWP内部调用的回调函数,用于发现特定重定向是否可被允许。它由子类LWP和重载redirect_ok使用,以对请求和响应执行更复杂的测试。

该方法采用两个参数:HTTP::RequestHTTP::Response。您将HTTP::Requestundef作为HTTP::Response传递为零。零作为用户代理request方法的参数是无用的,因此程序崩溃。

我不确切地知道需要什么,但要禁用所有重定向,您应该使用requests_redirectable方法,该方法采用对重定向有效的HTTP请求类型列表。默认情况下,它设置为

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

因此只会拒绝POST重定向。要防止重定向所有请求类型,请传递一个像这样的空列表

$mech->requests_redirectable([]);