perl - ¿Cómo obligo a LWP a utilizar Crypt:: SSLeay para las solicitudes HTTPS?
proxy (2)
Prueba esto:
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;
No tengo un proxy adecuado, así que no lo he probado yo mismo.
Mi síntoma es que no puedo usar un proxy con solicitudes HTTPS con LWP. Esto parece ser un problema común, y las sugerencias sobre Google e incluso aquí sugieren una HTTPS_PROXY
para establecer la variable de entorno HTTPS_PROXY
para que Crypt :: SSLeay lo utilice.
Mi problema específico parece ser que LWP :: Protocol :: https está cargando IO :: Socket :: SSL en lugar de Crypt :: SSLeay. ¿Cómo puedo forzar el uso de Crypt :: SSLeay en su lugar?
Mi código:
#!/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;
Y su salida muestra que Crypt :: SSLeay no se está utilizando:
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
Simplemente agregando un use Crypt::SSLeay
explícito de use Crypt::SSLeay
a mi script ha resultado ineficaz. Carga el módulo, pero continúa cargando IO :: Socket :: SSL y lo usa para las solicitudes HTTPS.
Esto es lo que hice para lograr que LWP y SOAP :: Lite trabajen con nuestro proxy en GE. Esto fue después de excavar mucho en CPAN, google etc. Finalmente lo descubrí después de ejecutar el script de prueba en el paquete Crypt :: SSLeay llamado net_ssl_test y se pudo conectar a través del proxy. La clave es forzar a Crypt :: SSLeay a usar Net :: SSL como se mencionó anteriormente. Sin embargo, esto no está documentado muy bien en CPAN.
use LWP::UserAgent;
# override HTTPS setting in LWP to work with a proxy
$ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS} = "Net::SSL";
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
$ENV{HTTPS_PROXY} = ''http-proxy.ae.ge.com:80'';
$ENV{HTTPS_PROXY_USERNAME} = ''username'';
$ENV{HTTPS_PROXY_PASSWORD} = ''password'';
$ua = new LWP::UserAgent;
# make a https request
my $req = HTTP::Request->new(GET => ''https://mail.google.com/'');
my $res = $ua->request($req);
print $res->as_string;