Mój symptom jest taki, że nie mogę używać proxy z żądaniami HTTPS z LWP. Wydaje się, że jest to powszechny problem, a wskazówki na temat Google, a nawet here, sugerują obejście ustawień zmiennej środowiskowej HTTPS_PROXY
do użycia przez Crypt :: SSLeay.Jak zmusić LWP do korzystania z Crypt :: SSLeay dla żądań HTTPS?
Mój specyficzny problem polega na tym, że LWP :: Protokół :: https ładuje IO :: Socket :: SSL zamiast Crypt :: SSLeay. Jak mogę wymusić użycie Crypt :: SSLeay?
Mój kod:
#!/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;
I to wyjście, pokazując, że Crypt :: SSLeay nie jest używany:
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
Wystarczy dodanie wyraźnego use Crypt::SSLeay
do mojego skryptu okazało się nieskuteczne. Ładuje moduł, ale nadal ładuje IO :: Socket :: SSL i używa go do żądań HTTPS.
Doskonale, dzięki! Wywołało to prawdopodobną przyczynę LWP do IO :: Socket :: SSL, o której mowa w [własnym pytaniu] (http://stackoverflow.com/questions/74358/how-can-i-get- lwp-to-validate-ssl-server-certificates): 'Net :: SSL z Crypt-SSLeay nie może zweryfikować nazw hostów; albo zainstaluj IO :: Socket :: SSL lub wyłącz weryfikację, ustawiając zmienną środowiskową PERL_LWP_SSL_VERIFY_HOSTNAME na 0' – Flimzy
LWP 6 zmieniono jej politykę sprawdzania poprawności nazw hosta. Jeśli możesz, użyj czegoś innego niż Crypt :: SSLeay, które nie ma dedykowanego programisty (chociaż Sinan pomagał w jego kompilacji). –
@ briandfoy: Jeśli mogę wymyślić jak używać IO :: Socket :: SSL (lub innej opcji - czy są inne opcje?) Z proxy, zrobię to. – Flimzy