我希望使用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);
我知道这个错误:
/home/user/project/local/lib/perl5/LWP/Protocol/http.pm第51行的SSL尝试失败错误:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown协议。
尽管我在LWP中指定了allowed_protocols,代理中的https方案和url方案是https,但它仍然转到LWP::Protocol::HTTP上面,而不是LWP::Protocol::HTTPS。
我还验证了LWP::Protocol::HTTPS的版本是6.06,与LWP::UserAgent (其中一个论坛中提到的)相同。
发布于 2016-09-06 10:52:14
这对我起了作用:
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中输入它。
发布于 2016-09-06 13:05:02
使用最新版本的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
的,因为它没有正确检查证书,因此不再建议使用它。
https://stackoverflow.com/questions/39346745
复制相似问题