As camadas por trás de uma solicitação HTTPS Mechanize via proxy
Veja como o Mechanize, o módulo de protocolo HTTPS do LWP e o backend SSL cooperam para rotear, criar túnel e verificar uma solicitação HTTPS.
Defina a rota no objeto Mechanize antes de buscar:
use WWW::Mechanize;
my $mech = WWW::Mechanize->new(timeout => 30);
$mech->proxy(
['http', 'https'],
'http://proxy.example.net:8080',
);
Use o ouvinte HTTP pretendido no exemplo; para solicitações permitidas a destinos públicos, os candidatos estão na lista de proxies HTTP. A matriz nomeia os esquemas de destino. O endpoint http:// fornece uma rota CONNECT comum para HTTPS: HTTP para o proxy, túnel até o destino e depois TLS do destino. Se a implantação usar configurações de ambiente em vez disso, $mech->env_proxy é a alternativa; importá-las depois pode alterar uma rota atribuída no código.
Mechanize herda a rede do LWP::UserAgent em vez de fornecer um mecanismo de proxy HTTPS separado:
- Mechanize fornece links, formulários e comportamento da página atual.
- LWP::UserAgent e seu transporte HTTP selecionam a rota e organizam o CONNECT.
- LWP::Protocol::https fornece o tratamento de HTTPS e atualiza a conexão.
- Net::HTTPS com seu backend SSL fornece o soquete compatível com TLS, normalmente IO::Socket::SSL em configurações modernas.
Um backend SSL instalado não seleciona um proxy por si só. Mantenha o nome do host HTTPS original na URL: a aceitação do CONNECT não verifica o certificado desse site.
Ao manter componentes antigos, distinga estas fronteiras. libwww-perl 6.06 e o LWP::Protocol::https 6.06 distribuído separadamente introduziram correções coordenadas para o CONNECT HTTP normal. A versão do UserAgent sozinha não identifica o módulo HTTPS. LWP::Protocol::https 6.15 adicionou uma correção para endpoints de proxy com TLS, cujo esquema https:// adiciona TLS ao proxy antes do TLS de destino.
Configurações mais antigas de Net::SSL/Crypt::SSLeay podem usar, em vez disso, o mecanismo de ambiente HTTPS_PROXY documentado desse backend. Não aplique sua receita ao caminho moderno IO::Socket::SSL, onde o LWP é responsável pelo roteamento.
Use o primeiro estágio com falha para escolher o componente: um manipulador HTTPS ausente diz respeito ao módulo de protocolo; um CONNECT rejeitado diz respeito à rota, credenciais ou política; um erro de certificado após o túnel diz respeito à identidade e à confiança do destino. Mantenha a verificação enquanto altera o componente apoiado por essa evidência.