Perl LWP拒绝通过HTTPS连接

Perl LWP拒绝通过HTTPS连接,perl,https,debian,lwp,Perl,Https,Debian,Lwp,我使用PerlV5.14.2和libwww perlV6.04-1在Debian上运行以下Perl代码段 my $ua = LWP::UserAgent->new; my $req = HTTP::Request->new("GET", "https://google.com/"); my $rep = $ua->request($req); print $rep->status_line; 这会立即返回“500无法连接到google.com:443”。我尝试过使用LW

我使用PerlV5.14.2和libwww perlV6.04-1在Debian上运行以下Perl代码段

my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new("GET", "https://google.com/");
my $rep = $ua->request($req);
print $rep->status_line;
这会立即返回“500无法连接到google.com:443”。我尝试过使用
LWP::Simple、Net::SSLeay、Crypt::SSLeay
等,但没有成功

奇怪的是,在另一个运行完全相同Perl和LWP版本的Debian系统上执行相同的代码是可行的

所以我认为,底层系统存在一些错误,但其他应用程序(如适用于任何浏览器的cURL)工作正常

另外,在两个系统上,
openssl s_client-connect google.com:443
返回
验证返回代码:20(无法获取本地颁发者证书)

有没有人遇到过这种现象并找到了解决方案?

而不是:

$ua = LWP::UserAgent->new;
尝试使用以下方法:

$ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0 });

供其他与LWP 500 EROR作战的人员参考:

某些LWP 500错误显然是由另一种类型的SSL问题(verify_主机名设置无法解决)引起的。相反,LWP可能正在与HTTPS服务器通信,但响应不是LWP所期望的。在我的案例中,解决方案是通过以下方式强制SSLv3:

my %ssl_options = (SSL_version => 'SSLv3');
$ua = LWP::UserAgent->new(ssl_opts => \%ssl_options), 
另外,如果有人想知道你会遇到什么样的错误,请将其与错误一起输出:

print $response->as_string;
对于我的问题(通过设置SSLv3解决),我的$response->as\u字符串输出包括:

“SSL例程:SSL23\u GET\u SERVER\u HELLO:sslv3警报意外消息LWP”

我还要说,我的代码在较早版本的Ubuntu上运行了多年。这个问题只有在我升级Ubuntu后才出现。我的结论是,LWP的新版本与旧版本可能有多种不同之处,所以开发人员要小心


祝你好运解决你的LWP问题

我在Windows Server 2003上遇到此问题。错误500是
IO::Socket::IP
的问题


重新安装模块(在
cpan
中,强制安装
IO::Socket::IP
)解决了问题。

尝试
wgethttps://google.com/
为确保网络未阻塞流量,此操作正常。如前所述,它还可以与其他编程语言或软件一起使用。它似乎是特定于perl的。有没有办法让LWP更加冗长?当然,它提供的不仅仅是这些。您有LWP::Protocol::https吗?下一步是打开https调试选项
使用IO::Socket::SSL qw(debug3);/$环境{HTTPS_DEBUG}
。。。巴斯德宾?类似于7行,FWIW供将来参考,更新您的帖子:)HTTPS调试为我提供了解决方案,一个与a相关的SSL版本错误,我很久以前在IO::Socket::SSL中应用了它的解决方法,我已经忘记了。重新安装产生了预期的结果。非常感谢。也许你应该把提示
放在使用IO::Socket::sslqw(debug3)上作为答案,这在一般情况下肯定会有所帮助。感谢您的回答,但正如我在问题和注释中所指出的,“将verify_hostname设置为零没有任何区别”。在一般情况下,它可能会有所帮助,但在这个具体情况下,它可能会有所帮助。如果您阅读评论中的讨论,您会发现,这个问题的解决方式有所不同。