我希望使用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(在其中一个论坛中提到)相同
答案 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
,不再推荐使用它,因为它不会正确检查证书。