Слои за HTTPS-запросом Mechanize через прокси
Посмотрите, как Mechanize, модуль протокола HTTPS из LWP и SSL-бэкенд совместно маршрутизируют, туннелируют и проверяют один HTTPS-запрос.
Задайте маршрут у объекта 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 относится к маршруту, учётным данным или политике; ошибка сертификата после туннеля относится к идентичности и доверию к цели. Сохраняйте проверку при смене компонента, который подтверждается этими данными.