在获取之前,在 Mechanize 对象上设置路由:

use WWW::Mechanize;

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

使用示例中预期的 HTTP 监听器;对于允许的公共目标请求,候选地址位于HTTP 代理列表中。数组指定目标方案。http:// 端点提供 HTTPS 的普通 CONNECT 路由:到代理的 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 后端本身不会选择代理。在 URL 中保留原始 HTTPS 主机名:接受 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 环境机制。不要将其配方应用到由 LWP 负责路由的现代 IO::Socket::SSL 路径。

用第一个失败的阶段来选择组件:缺少 HTTPS 处理器关系协议模块;CONNECT 被拒关系路由、凭据或策略;隧道后的证书错误关系目标身份和信任。在更换该证据支持的组件时保持验证。

相关文章