2015-02-09 87 views
0

我需要在一次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進程中,代理設置無法更改。

+0

這看起來很好。它與您正在運行的實際代碼不同嗎? – Borodin 2015-02-09 17:04:32

+0

(我原來的代碼更復雜。)但是當我運行這個簡單的例子時,輸出是相同的。換句話說,這個簡單的程序會導致所描述的行爲。 – perLHawk 2015-02-10 07:31:25

+0

它可能是由於代理配置?這些代理以某種方式連接起來進行負載均衡,還是可以選擇使用哪個接口? – 2015-02-11 00:20:28

回答

-1

我不知道這裏到底發生了什麼,實際上我認爲你可能在LWP中發現了一個錯誤(如果你向我們展示的是你實際執行的)。然而,是否有一個原因,你是從HTTP :: Request而不是直接通過User Agent對象構建GET請求的?換句話說,而不是這樣做:

my $req = HTTP::Request->new(GET => $url); 
return $ua->request($req)->as_string; 

這樣做:

my $res = $ua->get($url); 
return $res->as_string; 

從理論上講,這兩種方法應該是等價的,但我不知道,如果代理設置不正確傳播到HTTP ::請求,當你這樣做。

+0

在我的簡單示例中沒有理由使用HTTP :: Request。 – perLHawk 2015-02-10 07:24:15

+0

當我將代碼更改爲您的建議時,輸出是相同的。 – perLHawk 2015-02-10 07:33:26

相關問題