/ / Warum kann ich LWP :: UserAgent keine IP zuweisen? - perl, ip, lwp-useragent

Warum kann ich LWP :: UserAgent keine IP zuweisen? - perl, ip, lwp-useragent

Ich habe ein Skript, das in der Lage sein sollteAnrufe an einen Dienst mit unterschiedlichen IP-Adressen. Mein Code funktioniert, wenn ich keine IP-Adresse für Anrufe setze. Ich schrieb eine Funktion, um dem Objekt eine IP zuzuweisen, bevor Aufrufe aufgerufen werden. Es wird jedoch ein Fehler ausgegeben:

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

Dies ist meine Funktionsstruktur:

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

Und so nenne ich sie:

set_caller_ip($caller_ip_address);

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

Wissen Sie, was das Problem ist ?!

Danke im Vorraus für deine Hilfe!

Antworten:

8 für die Antwort № 1

Das local_address Attribut wurde hinzugefügt LWP :: UserAgent Version 5.834. Könnten Sie eine ältere Version verwenden?

Versuchen:

use LWP::UserAgent 5.834; # need local_address

(Immer wenn ich für ein Modul eine Mindestversion vorlege, versuche ich, einen kurzen Kommentar hinzuzufügen, in dem erklärt wird, warum dies die Mindestversion ist.)


1 für die Antwort № 2

@cjm hat die Frage zu Ihrem Fehler bereits beantwortet, es kann jedoch hilfreich sein, eine Alternative für ältere Versionen von LWP :: UserAgent zu beachten.

Es gibt eine nicht (oder zumindest unter-) dokumentierte Funktion von LWP :: Protocol :: http, mit der Sie "zusätzliche Socket-Optionen" einstellen können. Ich mache dies in meinem Code (mit 5.824) und es funktioniert:

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

Derselbe Code in LWP / Protocol / http.pm scheint auch in einem viel älteren LWP vorhanden zu sein, das mit Perl 5.8 auf einem alten RHEL4-System installiert ist.