我的症状是我无法对具有LWP的HTTPS请求使用代理。这似乎是一个常见问题,Google甚至here上的提示都提出了一种解决方法,用于设置Crypt :: SSLeay使用的HTTPS_PROXY环境变量。

我的特定问题似乎是LWP :: Protocol :: https正在加载IO :: Socket :: SSL而不是Crypt :: SSLeay。如何强制使用Crypt :: SSLeay?

我的代码:

#!/usr/bin/perl

use strict;
use warnings;
$ENV{HTTPS_PROXY} = 'http://10.0.3.1:3128';
use LWP::UserAgent;
my $ua = LWP::UserAgent->new();
my $req = HTTP::Request->new('GET','https://www.meritrustcu.org/');
my $res = $ua->request($req);
print "$_\n" for grep { $_ =~ /SSL/ } keys %INC;


它的输出显示未使用Crypt :: SSLeay:

Net/SSLeay.pm
IO/Socket/SSL.pm
/usr/lib/perl5/auto/Net/SSLeay/autosplit.ix
/usr/lib/perl5/auto/Net/SSLeay/set_proxy.al
/usr/lib/perl5/auto/Net/SSLeay/randomize.al


简单地在脚本中添加显式use Crypt::SSLeay被证明是无效的。它加载模块,但继续加载IO :: Socket :: SSL,并将其用于HTTPS请求。

最佳答案

试试这个:

use strict;
use warnings;

use Net::SSL (); # From Crypt-SSLeay
BEGIN {
  $Net::HTTPS::SSL_SOCKET_CLASS = "Net::SSL"; # Force use of Net::SSL
  $ENV{HTTPS_PROXY} = 'http://10.0.3.1:3128';
}

use LWP::UserAgent;
my $ua = LWP::UserAgent->new();
my $req = HTTP::Request->new('GET','https://www.meritrustcu.org/');
my $res = $ua->request($req);
print "$_\n" for grep { $_ =~ /SSL/ } keys %INC;


我没有合适的代理,所以我自己也没有尝试过。

10-01 21:23