6

我正在使用 Perl v5.14.2 和 libwww-perl v6.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 Can't connect to google.com:443"。我曾尝试使用LWP::Simple, Net::SSLeay, Crypt::SSLeay等,但没有任何成功。

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

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

此外,返回openssl s_client -connect google.com:443两个系统Verify return code: 20 (unable to get local issuer certificate)

有没有人遇到过这种现象并有解决办法?

4

3 回答 3

7

而不是这个:

$ua = LWP::UserAgent->new;

尝试使用这个:

$ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0 });
于 2014-02-07T12:34:40.780 回答
3

仅供其他与 LWP 500 错误作斗争的人参考:

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

my %ssl_options = (SSL_version => 'SSLv3');
$ua = LWP::UserAgent->new(ssl_opts => \%ssl_options), 

此外,对于任何试图弄清楚您遇到什么样的 500 错误的人,请将其与您的错误一起输出:

print $response->as_string;

对于我的问题(通过设置 SSLv3 解决),我的 $response->as_string 输出包括:

“SSL 例程:SSL23_GET_SERVER_HELLO:sslv3 警报意外消息 LWP”

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

祝您好运解决您的 LWP 问题!

于 2014-11-11T17:21:10.963 回答
1

我在带有Strawberry Perl的 Windows Server 2003 上遇到了这个问题。错误 500 是IO::Socket::IP.

执行模块的重新安装(在cpan,强制安装IO::Socket::IP)解决了这个问题。

于 2015-01-06T21:51:03.237 回答