Задайте маршрут у объекта Mechanize перед получением:

use WWW::Mechanize;

my $mech = WWW::Mechanize->new(timeout => 30);
$mech->proxy(
    ['http', 'https'],
    'http://proxy.example.net:8080',
);

Используйте предполагаемый HTTP-прослушиватель из примера; для разрешённых запросов к публичным целям кандидаты находятся в списке HTTP-прокси. Массив называет схемы назначения. Конечная точка http:// обеспечивает обычный маршрут CONNECT для HTTPS: HTTP к прокси, туннель к цели, затем TLS цели. Если развёртывание вместо этого использует переменные окружения, альтернативой является $mech->env_proxy; их последующий импорт может изменить маршрут, заданный в коде.

Mechanize наследует сетевые возможности LWP::UserAgent, а не предоставляет отдельный механизм HTTPS-прокси:

  • Mechanize предоставляет ссылки, формы и поведение текущей страницы.
  • LWP::UserAgent и его HTTP-транспорт выбирают маршрут и организуют CONNECT.
  • LWP::Protocol::https обеспечивает обработку HTTPS и обновляет соединение.
  • Net::HTTPS со своим SSL-бэкендом предоставляет сокет с поддержкой TLS, обычно IO::Socket::SSL в современных конфигурациях.

Установленный SSL-бэкенд сам по себе не выбирает прокси. Сохраняйте исходное имя HTTPS-хоста в URL: принятие CONNECT не проверяет сертификат этого сайта.

При поддержке старых компонентов различайте эти границы. libwww-perl 6.06 и отдельно распространяемый LWP::Protocol::https 6.06 внесли согласованные исправления для обычного HTTP CONNECT. Одна лишь версия UserAgent не определяет модуль HTTPS. LWP::Protocol::https 6.15 добавил исправление для прокси-эндпоинтов с TLS, чья схема https:// добавляет TLS к прокси перед TLS цели.

Более старые конфигурации Net::SSL/Crypt::SSLeay могут вместо этого использовать документированный механизм окружения HTTPS_PROXY этого бэкенда. Не применяйте его рецепт к современному пути IO::Socket::SSL, где маршрутизацией владеет LWP.

Используйте первый неудавшийся этап для выбора компонента: отсутствующий обработчик HTTPS относится к модулю протокола; отклонённый CONNECT относится к маршруту, учётным данным или политике; ошибка сертификата после туннеля относится к идентичности и доверию к цели. Сохраняйте проверку при смене компонента, который подтверждается этими данными.

Похожие статьи