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

the*_*Eli 6 perl ssl https lwp 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";
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因,HTTPS_DEBUG功能不会输出调试,这使得解决这个问题变得更加困难.

运行脚本时,我收到一般错误:

 Error: 500 Can't connect to www.google.com:443
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很棒!

Ste*_*ich 7

请确保您至少使用版本6.06的LWP :: UserAgent和版本6.06的LWP :: Protocol :: https.之前的任何版本都没有对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";
Run Code Online (Sandbox Code Playgroud)

如果您使用少于所需版本升级的任何内容.虽然LWP :: UserAgent很容易,但默认情况下cpan可能无法安装最新版本的LWP :: Protocol :: https,请参阅http://www.nntp.perl.org/group/perl.libwww/2014/05 /msg7718.html.在这种情况下,您必须从http://search.cpan.org/~mschilli/LWP-Protocol-https-6.06/明确地获取它.

如果您使用的是最近的Debian系统或Ubuntu> = 14.04,您仍然可以使用版本6.04的LWP :: Protocol :: https,但这已经包含了正确的https代理支持所需的补丁.

另一个替代方案是使用旧的Net :: SSL/Crypt :: SSLeay后端用于LWP,但我建议不要使用它,因为它没有实现所有必要的证书检查,从而加剧了中间人攻击这很容易.