perl - 为什么我无法为 LWP::UserAgent 分配 IP?

标签 perl ip lwp-useragent

我有一个脚本,应该能够对具有不同 IP 地址的服务进行一些调用。当我没有为我的调用设置任何 IP 时,我的代码可以工作,我编写了一个函数在调用之前为对象分配一个 IP,但它返回一个错误:

Can't locate object method "local_address" via package "LWP::UserAgent"

这是我的函数结构:

#!/usr/bin/perl -w

use LWP::UserAgent;
use HTTP::Headers;
use HTTP::Request::Common;
use HTTP::Cookies;
use URI::Escape;
use HTML::LinkExtor;

# set user agent object values
my $ua = new LWP::UserAgent;
$ua->agent('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.10) Gecko/20050716 Firefox/1.0.6');
push @{ $ua->requests_redirectable }, 'POST';
$ua->cookie_jar({});


sub set_caller_ip {
    my($set_ip_address) = @_;

    $ua->local_address("$set_ip_address");
    return 1;
}


sub test_caller_ip {

    my $req = new HTTP::Request('GET', 'http://whatismyip.org/');
    $req->headers->push_header('Connection','Keep-Alive');
    $req->headers->push_header('Accept','text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
    my $res = $ua->request($req) or die "$!";

    return $res->content();
}

这就是我调用它们的方式:

set_caller_ip($caller_ip_address);

$caller_ip_tested = test_caller_ip();
print "\$caller_ip_tested=".$caller_ip_tested."\n";die;

你知道问题出在哪里吗?!

提前感谢您的帮助!

最佳答案

local_address 属性已添加到 LWP::UserAgent版本 5.834。您可以使用旧版本吗?

尝试:

use LWP::UserAgent 5.834; # need local_address

(每当我指定模块的最低版本时,我都会尝试添加一个简短的注释来解释为什么这是最低版本。)

关于perl - 为什么我无法为 LWP::UserAgent 分配 IP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9541671/

相关文章:

perl - 使用 LWP::UserAgent 的 Perl 代码在做什么?

string - Perl:将字符串转换为 Unicode

perl - 为什么打开undef不会失败?

linux - telnet 127.0.0.1 peer 不是 127.0.0.1

windows - 从 IPConfig 获取 IP 地址,稍后在代码中使用,或保存

perl - 使用 LWP::UserAgent 时不保存 Cookie

perl - LWP::UserAgent HTTP 基本身份验证

perl - Image::Magick Composite() 与 Gimp 图层叠加的区别

javascript - 什么 perl 正则表达式可以正确匹配 javascript 关联数组?

security - 如何限制对特定位置/计算机的网络应用程序访问?