使用LWP::UserAgent在代理上进行Perl HTTPS请求

3

我希望使用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 连接尝试失败,错误为“error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol”,位于“/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 版本相同(这是一个论坛提到的信息)。

已解决!有什么建议可以让我尝试吗? - alpha_cod
很抱歉,我不确定。如果您能提供一个测试服务器,我可以试着调试一下。但是就目前而言,我没有任何想法。 - simbabque
这是一个带有凭据的私人代理云。 - alpha_cod
你为什么要设置 SSLv3?是因为你真的需要它,还是因为你在某个地方看到了它? - Sinan Ünür
2个回答

3
这对我有用:
use LWP::UserAgent;

$ua = LWP::UserAgent->new(); 
$ua->proxy('https', 'connect://<USER>:<PSWD>@<IP>:<PORT>/');

$ua->get('https://www.somesslsite.com');

HTTPS代理和LWP::UserAgent

注意:对我来说,环境凭据(HTTPS_PROXY_USERNAME)无效。我必须像上面那样在URL中输入它。


1
只有在安装了“LWP::Protocol::connect”时,“connect://”方案才能正常工作。它也适用于6.06之前的LWP版本。但是,对于从6.06开始的版本,我建议使用内置代理功能,因为您不必安装额外的模块。 - Steffen Ullrich

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的,但不建议使用它,因为它无法正确检查证书。


1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Sinan Ünür

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接