1

我正在尝试使用 VMware Perl 库(它似乎在 ESXi 主机上调用 SOAP 服务)编写 Linux 机器和 ESXi 主机之间的一些交互。

我收到一个我找不到解决方案的错误:Undefined subroutine &LWP::Protocol::https::Socket::can_read called at /usr/local/share/perl5/LWP/Protocol/http.pm line 22

我目前正在运行 Net-HTTP-6.03。我确实尝试过使用 Net-HTTP-6.05,但它使基于 Web 的调用非常慢(随后的调用也最终失败,而不是大约 1.2MB 的 XML 作为错误消息)——各种论坛建议只能通过还原来解决到 6.03(通过cpan install GAAS/Net-HTTP-6.03.tar.gz)。

我的代码的症结如下:

use VMware::VIRuntime;
my $context = {
    options => ParseOptions(),  # result of using GetOpts::Long to parse command-line
    session => undef
};

$ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS} = "Net::SSL";    # Suppresses SSL_VERIFY_NONE
if ($context->{options}->{'ignore-ssl-errors'}) { 
    $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;            # Ignores certificate errors
}

## next line fails
$context->{session} = Vim::login(
    service_url => $context->{options}->{url}, 
    username => $context->{options}->{username}, 
    password => $context->{options}->{password}
);

我(可以|需要)做些什么来让它工作吗?

4

2 回答 2

1

我懂了。我需要从旧版本重新安装 Bundle::LWP,而不仅仅是 Net-HTTP。没有它,我让 LWP v6.05 试图与 Net-HTTP v6.03 对话。

一旦我意识到 LWP == libwww-perl(是的,我就是新人),我找到了我需要的整体包:

cpan install GAAS/libwww-perl-6.03.tar.gz
于 2013-03-16T00:52:48.287 回答
0

使用 LWP 6.05 和 Net::HTTP 6.01 复制,这是 MacPorts 在撰写本文时安装的鸡尾酒。将 Net::HTTP 升级到 6.06(当前)解决了它:

sudo cpan Net::HTTP
于 2014-03-17T11:00:31.267 回答