使用LWP :: UserAgent在代理上使用Perl HTTPS

时间:2016-09-06 10:27:26

标签: perl https proxy lwp lwp-useragent

我希望使用perl的LWP :: UserAgent模块通过HTTPS代理请求URL。围绕这个有很多参考,但没有任何东西可以帮助我实现它。

#!/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连接尝试失败错误:140770FC:SSL   例程:SSL23_GET_SERVER_HELLO:未知协议at   /home/user/project/local/lib/perl5/LWP/Protocol/http.pm第51行。

尽管我在LWP中指定了allowed_protocols,在代理中使用了https方案,并且url方案是https,但它仍然是上面的LWP :: Protocol :: HTTP而不是LWP :: Protocol :: HTTPS。

我还验证了LWP :: Protocol :: HTTPS的版本是6.06,它与LWP :: UserAgent(在其中一个论坛中提到)相同

2 个答案:

答案 0 :(得分:2)

这对我有用:

msiexec /i MyMsi.msi ACCOUNT= PASSWORD=

HTTPS Proxy and LWP::UserAgent

注意:环境凭据(HTTPS_PROXY_USERNAME)对我不起作用。我必须在上面的URL中输入它。

答案 1 :(得分:2)

使用最新版本的LWP(从版本6.06开始)的正确设置是使用与其他应用程序中的proxy函数相同的语法:

 my $ua = LWP::UserAgent->new;
 $ua->proxy(https => 'http://user:pass@proxy');
 $ua->get('https://server');

或者,您可以将环境变量https_proxy设置为相同的值,即http://user:pass@proxy

在6.06之前,代理支持至少在与IO :: Socket :: SSL一起使用时被破坏(默认情况下从6.0版开始)。您在问题中使用的语法是旧的后端Crypt::SSLeay,不再推荐使用它,因为它不会正确检查证书。