2016-09-06 86 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)。 –

相关问题