Perl会话中的LWP :: UserAgent代理

时间:2015-02-09 15:05:42

标签: perl shell proxy terminal 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

y.y.y.y是我的无代理地址

操作系统: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/

结果:始终是x.x.x.1代理

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/`;

结果:始终是x.x.x.4代理

看起来代理设置无法在一个shell进程中更改。

1 个答案:

答案 0 :(得分:-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 :: Request。