我的症狀是我無法使用帶LWP的HTTPS請求代理。這似乎是一個常見問題,並且Google上的提示,甚至here都提示了設置HTTPS_PROXY
環境變量的解決方法,以供Crypt :: SSLeay使用。如何強制LWP使用Crypt :: SSLeay進行HTTPS請求?
我的具體問題似乎是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;
而且它的輸出,顯示出不使用地穴:: 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請求。
完美,謝謝! 這樣做揭示了LWP默認爲IO :: Socket :: SSL的可能原因,正如你在[自己的問題]中所觸及的(http://stackoverflow.com/questions/74358/how-can-i-get- lwp-to-validate-ssl-server-certificates):來自Crypt-SSLeay的Net :: SSL無法驗證主機名;要麼安裝IO :: Socket :: SSL,要麼通過將PERL_LWP_SSL_VERIFY_HOSTNAME環境變量設置爲0來關閉驗證 – Flimzy
LWP 6在驗證主機名時更改了它的策略。如果可以的話,使用Crypt :: SSLeay以外的東西,它沒有專門的開發人員(儘管Sinan一直在幫助編譯)。 –
@briandfoy:如果我可以通過代理了解如何使用IO :: Socket :: SSL(或其他選項 - 是否有其他選項?),我會這樣做。 – Flimzy