Из вашего кода:
$pua->nonblock('true');
При взгляде на код LWP :: Parallel :: UserAgent похоже, что неблокирующая поддержка HTTPS полностью нарушена: https
поддержка реализована в LWP:: Parallel :: Protocol :: https, который происходит от LWP :: Parallel :: Protocol :: http для , выполняющего фактическое соединение .Соответствующий код в sub _connect :
103 unless ($nonblock) {
104 # perform good ol' blocking behavior
105 #
106 # this method inherited from LWP::Protocol::http
107 $socket = $self->_new_socket($host, $port, $timeout);
108 # currently empty function in LWP::Protocol::http
109 # $self->_check_sock($request, $socket);
110 } else {
111 # new non-blocking behavior
...
116 $socket =
117 IO::Socket::INET->new(Proto => 'tcp', # Timeout => $timeout,
118 $self->_extra_sock_opts ($host, $port));
Видно, что для случая блокировки (по умолчанию) код использует функциональность LWP::Protocol::http
, но для случая неблокированияон напрямую использует IO::Socket::INET
- а не IO::Socket::SSL
для HTTPS.Но LWP :: Protocol :: http (который используется позже) на самом деле ожидает сокет SSL и пытается вызвать get_cipher
на нем.Это приводит к ошибке, которую вы видите:
Невозможно найти метод объекта "get_cipher" через пакет "IO :: Socket :: INET" в / usr / share / perl5 / LWP / Protocol / https.pm line 119
Когда не используется неблокирующая поддержка, кажется, что код работает вместо этого.
Что касается HTTPS в целом в этом модуле, см. README.SSL :
** DISCLAIMER: https support is pretty buggy as of now. i haven't **
** had time to test much of it, so feel free to see if it works **
** for you, but don't expect it to :-)
Другими словами: вам, вероятно, следует использовать другой модуль для получения надежной поддержкиHTTPS.