/ / Prečo nemôžem priradiť IP k LWP :: UserAgent? - perl, ip, lwp-useragent

Prečo nemôžem priradiť IP k LWP :: UserAgent? - perl, ip, lwp-useragent

Mám skript, ktorý by mal byť schopný urobiť nejakévolania na službu s rôznymi adresami IP. Môj kód funguje, keď nepristúpim k žiadnym IP hovorom, napísal som funkciu priradiť IP objektu pred uskutočnením hovorov, ale vráti chybu:

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

Toto je moje funkčná štruktúra:

#!/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();
}

A to je spôsob, akým som ich nazval:

set_caller_ip($caller_ip_address);

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

Viete, čo je to problém ?!

Ďakujeme za vašu pomoc vopred!

odpovede:

8 pre odpoveď č. 1

Na local_address atribút bol pridaný v LWP::useragent verzia 5.834. By mohli byť pomocou staršej verzie?

skúste:

use LWP::UserAgent 5.834; # need local_address

(Vždy, keď som zadať minimálnu verziu pre modul, pokúsim pridať krátky komentár vysvetľuje, prečo že "s minimálnu verziu.)


1 pre odpoveď č. 2

@cjm už odpovedal na otázku o chybu, ale môže byť užitočné si uvedomiť alternatívu pre staršie verzie LWP::UserAgent.

Tam "s un - (alebo aspoň pod-) zdokumentovaná funkcie LWP::Protocol::http, ktorá vám umožní nastaviť"extra Konvertory možnosti".Robím to v mojom kódu (pomocou 5.824) a funguje to:

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

Zdá sa, že rovnaký kód v LWP / Protocol / http.pm existuje aj v oveľa staršom LWP nainštalovanom s perlom 5,8 na starom systéme RHEL4, takže to bolo asi chvíľu ... :-)