未定义的子程序LWP :: Protocol :: https :: Socket :: can_read被调用

时间:2013-03-16 00:30:45

标签: perl vmware

我正在尝试使用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}
);

我(可以)需要做些什么才能使其正常工作?

2 个答案:

答案 0 :(得分:1)

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

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

cpan install GAAS/libwww-perl-6.03.tar.gz

答案 1 :(得分:0)

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

sudo cpan Net::HTTP
相关问题