8

私の症状は、LWPを使用したHTTPS要求でプロキシを使用できないことです。これは一般的な問題のようであり、Googleのヒント、そしてここでもHTTPS_PROXYすべて、Crypt::SSLeayで使用する環境変数を設定するための回避策を示唆しています。

私の特定の問題は、LWP :: Protocol::httpsがCrypt::SSLeayではなくIO::Socket::SSLをロードしていることのようです。代わりに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要求に使用します。

4

2 に答える 2

9

これを試して:

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;

適切なプロキシがないので、自分で試したことはありません。

于 2011-11-06T11:06:28.407 に答える
1

これは、LWPとSOAP::LiteをGEのプロキシで動作させるために私が行ったことです。これは、CPAN、googleなどを深く掘り下げた後のことでした。net_ssl_testというCrypt :: SSLeayパッケージでテストスクリプトを実行した後、最終的にそれを理解し、プロキシ経由で接続できました。重要なのは、前述のようにCrypt::SSLeayにNet::SSLを使用させることです。ただし、これは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;
于 2012-02-02T18:43:36.940 に答える