2016-09-06 85 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); 

我得到這個錯誤:

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.

儘管我在LWP指定allowed_protocols,HTTPS在代理和URL方案是HTTPS方案,還是到LWP ::協議:: HTTP及以上而不是LWP :: Protocol :: HTTPS。

我也驗證了LWP ::協議的版本:: HTTPS是6.06是一樣的LWP :: UserAgent的

+0

固定!任何建議讓我試試 –

+0

不是真的我很害怕。如果你可以提供一個服務器來測試,我可以玩。但是,從我的頭頂來看,我沒有任何想法。 – simbabque

+0

它是一個私人代理雲與憑據.. –

回答

2

這爲我工作(這是在論壇中提及了):

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)我沒有工作。我必須在上面的URL中輸入它。

+1

只有安裝了'LWP :: Protocol :: connect','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]

6.06代理支持至少在與IO :: Socket :: SSL(自6.0版以來的默認值)一起使用時被破壞。您在問題中使用的語法是針對舊的後端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)。 –

相關問題