HTTP-запрос Perl пропускает прокси-сервер и напрямую подключается к цели - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь написать Perl-скрипт для извлечения данных с веб-адреса через прокси-сервер Squid.У меня есть сервер Squid, работающий на CentOS7, прослушивающий порт 3128 и аутентифицирующийся с /usr/lib64/squid/basic_ncsa_auth.Тем не менее, я продолжаю получать Perl, кажется, полностью обойти прокси и подключается к цели напрямую.

Я смог сделать это с помощью curl, но не с помощью perl.

Я переписал свой сценарий perl несколькими способами.Я обновил версии Perl (в настоящее время на 5.28).


use LWP::UserAgent;

$ENV{'HTTP_PROXY'} = 'http://localhost:3128/';
$ENV{'HTTP_PROXY_USERNAME'} = 'user1';
$ENV{'HTTP_PROXY_PASSWORD'} = 'password1';

$ua = LWP::UserAgent->new();

$ua->proxy('http', 'http://localhost:3128/');

my $req = HTTP::Request->new('GET', 'https://stackoverflow.com');

$req->proxy_authorization_basic("user1", "password1");
my $res = $ua->request($req);

print $res->code ."\n";

Итак, приведенный выше код выдает «200», однако я не вижу записи в моих журналах доступа squid.Когда я пытаюсь выполнить маневр в curl

curl --proxy-user user1:password1 -x http://localhost:3128 https://stackoverflow.com)

, я получаю

1560893906.291 513 ::1 TCP_TUNNEL/200 270148 CONNECT stackoverflow.com:443 user1 HIER_DIRECT/151.101.65.69 -

в журнале доступа.

Очевидно, что я пропускаю какой-то шаг, но я скопировал примеры из документации по Perl и не смог заставить его работать.

1 Ответ

2 голосов
/ 19 июня 2019
$ua->proxy('http', 'http://localhost:3128/');
my $req = HTTP::Request->new('GET', 'https://stackoverflow.com');

При наличии доступа к URL-адресу https:// необходимо установить прокси-сервер для протокола https, а не http, как вы это сделали.

$ENV{'HTTP_PROXY'} = 'http://localhost:3128/';

Этот параметр используется толькоесли вы явно включите настройку прокси в зависимости от среды, то есть $ua->env_proxy.Более того, здесь также должно быть значение HTTPS_PROXY, а не HTTP_PROXY.

...