Perl 未定义的子例程LWP::Protocol::https::Socket::can_read调用
我正在尝试使用VMware Perl库(它似乎在ESXi主机上调用SOAP服务)编写Linux机器和ESXi主机之间的一些交互脚本 我遇到一个无法找到解决方案的错误:Perl 未定义的子例程LWP::Protocol::https::Socket::can_read调用,perl,vmware,Perl,Vmware,我正在尝试使用VMware Perl库(它似乎在ESXi主机上调用SOAP服务)编写Linux机器和ESXi主机之间的一些交互脚本 我遇到一个无法找到解决方案的错误:未定义的子例程&LWP::Protocol::https::Socket::can_read在/usr/local/share/perl5/LWP/Protocol/http.pm第22行调用 我目前正在运行Net-HTTP-6.03。我确实尝试过Net-HTTP-6.05,但它使基于web的调用速度非常慢(随后的调用也最终失败,错
未定义的子例程&LWP::Protocol::https::Socket::can_read在/usr/local/share/perl5/LWP/Protocol/http.pm第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}
);
我还可以(需要)做些什么来让它工作吗?我已经准备好了。我需要从旧版本重新安装Bundle::LWP,而不仅仅是nethttp。没有它,我让LWP v6.05尝试与NETHTTPV6.03对话
一旦我意识到LWP==libwww-perl(是的,我就是那个新手),我就找到了我需要的整个包:
cpan install GAAS/libwww-perl-6.03.tar.gz
我知道了。我需要从旧版本重新安装Bundle::LWP,而不仅仅是nethttp。没有它,我让LWP v6.05尝试与NETHTTPV6.03对话
一旦我意识到LWP==libwww-perl(是的,我就是那个新手),我就找到了我需要的整个包:
cpan install GAAS/libwww-perl-6.03.tar.gz
使用LWP 6.05和Net::HTTP 6.01复制,这是MacPorts在撰写本文时安装的鸡尾酒。将Net::HTTP升级到6.06(当前版本)解决了这个问题:
sudo cpan Net::HTTP
使用LWP 6.05和Net::HTTP 6.01复制,这是MacPorts在撰写本文时安装的鸡尾酒。将Net::HTTP升级到6.06(当前版本)解决了这个问题:
sudo cpan Net::HTTP