Perl 我无法使用LWP::UserAgent连接到任何HTTPS站点

Perl 我无法使用LWP::UserAgent连接到任何HTTPS站点,perl,ssl,https,lwp,lwp-useragent,Perl,Ssl,Https,Lwp,Lwp Useragent,我试图创建一个脚本,只需连接到一个网站。但是,由于某些原因,它不会连接到任何使用HTTPS的设备 我们在这里启用了代理。但是,我相信代理不是问题所在,因为如果我连接到网络中的HTTPS,而该网络没有通过代理进行隧道传输,那么它仍然会失败 如果我在任何不使用HTTPS的站点上运行这个程序,我可以通过,脚本可以按预期工作 我想知道的是,阻止脚本连接到任何受SSL保护的站点会有什么可能 以下是我编写的代码: $ENV{HTTPS_DEBUG} = 1; my $ua = LWP::UserAgent

我试图创建一个脚本,只需连接到一个网站。但是,由于某些原因,它不会连接到任何使用HTTPS的设备

我们在这里启用了代理。但是,我相信代理不是问题所在,因为如果我连接到网络中的HTTPS,而该网络没有通过代理进行隧道传输,那么它仍然会失败

如果我在任何不使用HTTPS的站点上运行这个程序,我可以通过,脚本可以按预期工作

我想知道的是,阻止脚本连接到任何受SSL保护的站点会有什么可能

以下是我编写的代码:

$ENV{HTTPS_DEBUG} = 1;

my $ua = LWP::UserAgent->new( keep_alive => 1);
$ua->agent('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36');
my $pac = HTTP::ProxyPAC->new( URI->new("http://pacfilelocation:8080/pac_file.pac") );
my $res = $pac->find_proxy("https://www.google.com");


if ($res->direct) {
    print "No Proxy Needed\n";
} elsif ($res->proxy) {
    print "Proxy: " . $res->proxy . "\n";
    $ENV{HTTPS_PROXY} = $res->proxy;
    $ENV{HTTP_PROXY} = $res->proxy;
    $ua->env_proxy;
}

my $req = new HTTP::Request('GET', 'https://www.google.com/');
$req->header('Accept' => 'text/html');
$req->header('Host', 'www.google.com');

my $res2 = $ua->request($req);

if ( $res2->is_success ) {
    print $res2->decoded_content;
} else {
    print "Error: " . $res2->status_line . "\n";
}
由于某种原因,HTTPS_调试功能不输出调试,这使得这一问题更加难以解决

运行脚本时,我遇到一个一般性错误:

 Error: 500 Can't connect to www.google.com:443

任何帮助都会很好

请确保您至少使用了LWP::UserAgent的6.06版本和LWP::Protocol::https的6.06版本。以前的任何版本都不支持https代理,至少在使用IO::Socket::SSL作为底层SSL库时不支持

要获取正在运行的版本,请执行以下操作:

use LWP::UserAgent;
use LWP::Protocol::https;
print "LWP::UserAgent: ".LWP::UserAgent->VERSION,"\n";
print "LWP::Protocol::https: ".LWP::Protocol::https->VERSION,"\n";
如果您使用的版本低于所需版本,请升级。虽然这对于LWP::UserAgent来说很容易,但cpan在默认情况下可能不会安装LWP::Protocol::https的最新版本,请参阅。在这种情况下,您必须明确地从中获取它

如果您使用的是最新的Debian系统或Ubuntu>=14.04,那么您仍将使用LWP::Protocol::https的6.04版本,但这已经包括了适当的https代理支持所需的补丁


另一种选择是为LWP使用旧的Net::SSL/Crypt::SSLeay后端,但我建议不要这样做,因为它没有实现所有必要的证书检查,因此很容易对其发起中间人攻击

将LWP::Protocol::https升级到6.06成功。非常感谢!注意:我必须手动安装6.06,因为cpan使用6.04