2015-02-09 2 views
0

Мне нужно изменить прокси-сервер в одном прогоне Perl (process). Но LWP::UserAgent всегда запоминает первое значение прокси.LWP :: Прокси-сервер UserAgent в Perl-сеансе

Когда я запускаю свою программу с прокси 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 

(гггг не мой не адрес прокси-сервера)

ОС: 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 поскольку настройки прокси-сервера не могут изменяться в одном режиме оболочки.

+0

Это выглядит отлично. Отличается ли он от фактического кода, который вы используете? – Borodin

+0

(Мой исходный код намного сложнее.) Но когда я запускаю этот простой пример, вывод тот же. Другими словами, эта простая программа вызывает описанное поведение. – perLHawk

+0

Возможно ли это из-за конфигурации прокси-сервера? Связаны ли прокси-серверы с балансировкой нагрузки или могут ли они выбрать, какой интерфейс используется? –

ответ

-1

Я не знаю, что здесь происходит, и, на самом деле, я думаю, что вы обнаружили ошибку в LWP (если то, что вы показываете нам, это то, что вы на самом деле выполняете). Однако есть ли причина, по которой вы создаете запрос GET из HTTP :: Request, а не напрямую через объект User Agent? Другими словами, вместо того, чтобы сделать это:

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

+0

Когда я изменил код на ваше предложение, вывод будет таким же. – perLHawk

Смежные вопросы