我需要在一次Perl運行(進程)中更改代理服務器。但LWP::UserAgent
始終記住第一個代理值。Perl會話中的LWP :: UserAgent代理
當我用代理x.x.x.2
啓動我的程序時,此地址始終用作代理。
出了什麼問題?
的簡單的程序實施例:
getHTTP('http://my.com/', "http://x.x.x.1:3128");
getHTTP('http://my.com/', "http://x.x.x.2:3128");
getHTTP('http://my.com/', "");
getHTTP('http://my.com/', "http://x.x.x.3:3128");
sub getHTTP {
my ($url, $proxy) = @_;
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
$ua->proxy(http => $proxy);
my $req = HTTP::Request->new(GET => $url);
return $ua->request($req)->as_string;
}
從HTTP日誌輸出:
x.x.x.1 - - [09/Feb/2015:15:28:06 +0100] "GET/HTTP/1.0" 200 3467
x.x.x.1 - - [09/Feb/2015:15:29:07 +0100] "GET/HTTP/1.0" 200 3467
y.y.y.y - - [09/Feb/2015:15:29:08 +0100] "GET/HTTP/1.0" 200 3467
x.x.x.1 - - [09/Feb/2015:15:29:09 +0100] "GET/HTTP/1.0" 200 3467
(yyyy是我的無代理地址)
OS:Debian的GNU/Linux的7
新的發現: 當我運行下一個perl或shell腳本。與上面相同的結果。
proxy.sh:
curl -x "http://x.x.x.1:3128" http://my.com/
curl -x "http://x.x.x.2:3128" http://my.com/
curl -x "http://x.x.x.3:3128" http://my.com/
結果:總XXX1代理
proxy.pl:
`curl -x "http://x.x.x.4:3128" http://my.com/`;
`curl -x "http://x.x.x.5:3128" http://my.com/`;
`curl -x "http://x.x.x.6:3128" http://my.com/`;
結果:總XXX4代理
它看起來l在一個shell進程中,代理設置無法更改。
這看起來很好。它與您正在運行的實際代碼不同嗎? – Borodin 2015-02-09 17:04:32
(我原來的代碼更復雜。)但是當我運行這個簡單的例子時,輸出是相同的。換句話說,這個簡單的程序會導致所描述的行爲。 – perLHawk 2015-02-10 07:31:25
它可能是由於代理配置?這些代理以某種方式連接起來進行負載均衡,還是可以選擇使用哪個接口? – 2015-02-11 00:20:28