2016-09-06 37 views
2

perlのLWP :: UserAgentモジュールを使用してHTTPSプロキシ経由でURLを要求したいとします。これについてはいくつかの参考文献がありますが、何も私がそれを働かせるのに役立つものはありません。LWP :: UserAgentを使用するPerl HTTPS

#!/usr/bin/perl 
use strict; 
use warnings; 
use LWP::UserAgent; 
use Data::Dumper; 

BEGIN { 
    $ENV{HTTPS_PROXY} = 'https://<IP>:<PORT>'; 
    $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0; 
    $ENV{HTTPS_PROXY_USERNAME} = '<API_KEY>'; 
    $ENV{HTTPS_PROXY_PASSWORD} = ''; 
    $ENV{HTTPS_DEBUG} = 1; #Add debug output 
} 

my $ua = LWP::UserAgent->new(ssl_opts => {verify_hostname => 0}, SSL_version => 'SSLv3', allowed_protocols => ['https', 'http']); 
$ua->proxy(['https', 'http'], 'https://<IP>:<PORT>'); 
my $req = HTTP::Request->new('GET','https://<DOMAIN_URL>'); 
print STDERR Dumper($ua); 
my $response = $ua->request($req); 
print $response->code ."\n"; 
print STDERR Dumper($response); 

私はこのエラーを取得する:プロキシでLWPにallowed_protocolsを指定して、私にもかかわらず

SSL connect attempt failed error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol at /home/user/project/local/lib/perl5/LWP/Protocol/http.pm line 51.

、HTTPSスキームとURLスキームは、HTTPSであること、それはまだLWPに行く::議定:: HTTP上記とLWP :: Protocol :: HTTPSではなく

は、私はまた、LWP ::プロトコルのバージョンは:: HTTPSこれは私のために働いた

+0

修正済み!私に試してみるための任意の提案 –

+0

本当に私は恐れていません。あなたがテストするサーバーを提供できれば、私は周りを遊ぶことができます。しかし、私の頭の上から私はアイデアはありません。 – simbabque

+0

資格のあるプライベートプロキシクラウド.. –

答えて

2

(フォーラムの一つで言及された)LWP :: UserAgentのと同じである6.06であることが検証:

use LWP::UserAgent; 

$ua = LWP::UserAgent->new(); 
$ua->proxy('https', 'connect://<USER>:<PSWD>@<IP>:<PORT>/'); 

$ua->get('https://www.somesslsite.com'); 

HTTPS Proxy and LWP::UserAgent

注:私のための環境の資格情報(HTTPS_PROXY_USERNAME)didntの仕事。私は上記のようなURLにそれを入力しなければなりませんでした。

+1

'connect://'体系は 'LWP :: Protocol :: connect'がインストールされている場合にのみ機能します。 6.06より前のバージョンのLWPでも動作します。しかし6.06で始まるバージョンでは、追加モジュールをインストールする必要がないので、組み込みプロキシ機能を使用することをお勧めします。 –

2

LWPの最近のバージョン(あなたが持っているバージョン6.06以降)との正しいセットアップがproxy機能を持つ他のアプリケーションを一緒に見られるようにちょうど同じ構文を使用することです:

my $ua = LWP::UserAgent->new; 
$ua->proxy(https => 'http://user:[email protected]'); 
$ua->get('https://server'); 

代わりにあなたが設定することができます環境変数https_proxyを同じ値、つまりhttp://user:[email protected]に設定します。

IO :: Socket :: SSL(バージョン6.0以降のデフォルト)と一緒に使用すると、6.06より前のプロキシサポートが壊れていました。あなたの質問には、古いバックエンドCrypt::SSLeayの構文があります。これは、証明書を正しくチェックしないために推奨されなくなりました。

+1

合意。 OPの場合、[Crypt :: SSLeayが必要ですか?](https://metacpan.org/pod/Crypt::SSLeay#DO-YOU-NEED-Crypt::SSLeay)と[あなたのコードは本当にCryptに依存していますか:: SSLeay?](https://www.nu42.com/2014/04/does-your-code-really-depend-on.html)。 –

関連する問題