2012-03-02 21 views
5

私は、異なるIPアドレスを持つサービスへの呼び出しを行うスクリプトを用意しています。LWP :: UserAgentにipを割り当てることができないのはなぜですか?

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

は、これは私の機能構造である:

私のコードは、私は私の呼び出しに任意のIPを設定していないとき、私は呼び出しを行う前に、オブジェクトにIPを割り当てるための関数を書いたが、それがエラーを返した作品
#!/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; 

あなたが問題だか知っていますか?

ご協力いただきありがとうございます。

答えて

8

local_address属性がLWP::UserAgentバージョン5.834で追加されました。古いバージョンを使用していますか?

試してみてください。

use LWP::UserAgent 5.834; # need local_address 

(私はモジュールの最小バージョンを指定するたびに、私はそれが最低限のバージョンだ理由を説明する短いコメントを追加してみてください。)

+0

ヒントありがとう!それは本当に可能です!私はバージョンをチェックさせてください! – Monica

+0

あなたは絶対に正しいです...ありがとう男!私はこの問題を3時間苦労していました...そして、実際には私はシステム管理者ではないので、今このモジュールをアップグレードする方法を学ぶべきです!とにかく...助けてくれてありがとう:) – Monica

+1

@Monica、「オブジェクトメソッドを見つけることができません」というメッセージが表示されたら、基本的に3つのオプションがあります:メソッド名のスペルを間違えてしまい、オブジェクトの種類が間違っています、またはモジュールのバージョンがあなたが読んでいるドキュメントと一致しない(およびAPIが変更された)場合。 – cjm

1

@cjmが既に質問に答えていますあなたのエラーについては、古いバージョンのLWP :: UserAgentの代替案に注目することが役に立ちます。

「余分なソケットオプション」を設定できるLWP :: Protocol :: httpには、文書化されていない機能があります。私は(5.824を使用して)私のコードでこれをやっている、それが動作します:

@LWP::Protocol::http::EXTRA_SOCK_OPTS = { LocalAddr => "10.11.12.13" }; 

LWP /プロトコル/ http.pm内の同じコードでも上のperl 5.8でインストールずっと年上LWPに存在しているようです古いRHEL4システムなので、しばらくお待ちください...:

関連する問題