/ / Pourquoi je ne peux pas attribuer une adresse IP à LWP :: UserAgent? - perl, ip, lwp-useragent

Pourquoi je ne peux pas attribuer une adresse IP à LWP :: UserAgent? - perl, ip, lwp-useragent

J'ai un script qui devrait pouvoir faire un peuappels vers un service avec des adresses IP différentes. Mon code fonctionne quand je ne mets aucune adresse IP à mes appels, j’ai écrit une fonction pour assigner une IP à l’objet avant de passer des appels, mais cela renvoie une erreur:

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

Voici la structure de mes fonctions:

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

Et voici comment je les appelle:

set_caller_ip($caller_ip_address);

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

Savez-vous quel est le problème?!

Merci d'avance pour votre aide!

Réponses:

8 pour la réponse № 1

le local_address attribut a été ajouté dans LWP :: UserAgent version 5.834. Pourriez-vous utiliser une version plus ancienne?

Essayer:

use LWP::UserAgent 5.834; # need local_address

(Chaque fois que je spécifie une version minimale pour un module, j’essaie d’ajouter un bref commentaire expliquant pourquoi cette version est la version minimale.)


1 pour la réponse № 2

@cjm a déjà répondu à la question sur votre erreur, mais il peut être utile de noter une alternative aux anciennes versions de LWP :: UserAgent.

Il existe une fonctionnalité non documentée (ou au moins sous-documentée) de LWP :: Protocol :: http qui vous permet de définir des "options de socket supplémentaires". Je le fais dans mon code (avec 5.824) et cela fonctionne:

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

Le même code dans LWP / Protocol / http.pm semble également exister dans un LWP bien plus ancien installé avec perl 5.8 sur un ancien système RHEL4, donc cela fait environ un moment ... :-)