我正在尝试创建一个仅连接到网站的脚本。但是,由于某种原因,它不会连接到使用 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_DEBUG 功能不会输出调试信息,这使得解决这个问题变得更加困难。
运行脚本时,我收到一般错误:
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,请参阅http://www.nntp.perl.org/group/perl.libwww/2014/05/msg7718.html http://www.nntp.perl.org/group/perl.libwww/2014/05/msg7718.html。在这种情况下,你必须明确地从http://search.cpan.org/~mschilli/LWP-Protocol-https-6.06/ http://search.cpan.org/~mschilli/LWP-Protocol-https-6.06/.
如果您使用的是最新的 Debian 系统或 Ubuntu >=14.04,您仍将拥有 LWP::Protocol::https 版本 6.04,但这已经包含了正确 https 代理支持所需的补丁。
另一种选择是使用旧的 Net::SSL/Crypt::SSLeay 后端进行 LWP,但我建议不要这样做,因为它没有实现所有必要的证书检查,从而引发中间人攻击这很容易。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)