La correction d'une erreur IO::Socket::SSL 1.56 must be installed for https support

Dans le langage de programmation Perl il y a plusieurs bibliothèques à l'aide de laquelle vous pouvez télécharger des données à partir d'internet par le protocole HTTP. Same connus est LWP et HTTP::Tiny. Bibliothèque HTTP::Tiny est livré avec Perl, pas besoin d'installer avancé, par conséquent, il est souvent plus pratique de télécharger des données en utilisant le.

Chargement de HTML pages sur le protocole http

Voici un exemple de code qui charge la page d'accueil du site http://example.com. Dans cet exemple utilise le protocole http et non https:

#!/usr/bin/perl

use strict;
use warnings;
use feature qw(say);

use HTTP::Tiny;
use Data::Dumper;

my $response = HTTP::Tiny->new()->get('http://example.com');

warn Dumper $response;

Si vous exécutez ce code, vous verrez que tout fonctionne. Ont obtenu le statut de 200. Le parcours de successla valeur est la vérité (dans ce texte pour l'affichage de la structure des données, le champ content a été modifiée à la valeur au lieu du code html des pages écrites à trois points):

$ perl script.pl
$VAR1 = {
          'reason' => 'OK',
          'protocol' => 'HTTP/1.1',
          'content' => '...',
          'headers' => {
                         'etag' => '"3147526947+gzip+ident"',
                         'x-cache' => 'HIT',
                         'connection' => 'close',
                         'cache-control' => 'max-age=604800',
                         'content-length' => '1256',
                         'server' => 'ECS (nyb/1D2A)',
                         'expires' => 'Mon, 30 Dec 2019 12:38:04 GMT',
                         'vary' => 'Accept-Encoding',
                         'content-type' => 'text/html; charset=UTF-8',
                         'date' => 'Mon, 23 Dec 2019 12:38:04 GMT',
                         'last-modified' => 'Thu, 17 Oct 2019 07:18:26 GMT'
                       },
          'url' => 'http://example.com',
          'success' => 1,
          'status' => '200'
        };

Erreur lors de l'utilisation du protocole https

Mais si un peu modifier ce code et télécharger des données via le protocole https, ce les données ne sont pas chargées. Voici le code du programme:

#!/usr/bin/perl

use strict;
use warnings;
use feature qw(say);

use HTTP::Tiny;
use Data::Dumper;

my $response = HTTP::Tiny->new()->get('https://example.com');

warn Dumper $response;

Voici le résultat du travail de ce programme:

$ perl script.pl
$VAR1 = {
          'url' => 'https://example.com',
          'reason' => 'Internal Exception',
          'status' => 599,
          'success' => '',
          'headers' => {
                         'content-type' => 'text/plain',
                         'content-length' => 57
                       },
          'content' => 'IO::Socket::SSL 1.56 must be installed for https support
'
        };

La valeur du champ status 599 (c'est le statut spécial inventé dans la bibliothèque de HTTP::Tiny, il signifie que le problème avec la bibliothèque). La valeur de la success est faux, et dans le champ content il ya une explication de la cause de ce qu'une erreur s'est produite: IO::Socket::SSL 1.56 must be installed for https support.

La tentative de la décision

L'agha. Pour HTTP::Tiny pourrait travailler sur le protocole https pour l'été bibliothèque IO::Socket::SSL.

Essayons de le mettre à l'aide cpanm, mais obtenons une erreur:

root@faf6a4b66b08:/app# cpanm IO::Socket::SSL
--> Working on IO::Socket::SSL
Fetching http://www.cpan.org/authors/id/S/SU/SULLR/IO-Socket-SSL-2.066.tar.gz ... OK
==> Found dependencies: Net::SSLeay
--> Working on Net::SSLeay
Fetching http://www.cpan.org/authors/id/C/CH/CHRISN/Net-SSLeay-1.88.tar.gz ... OK
Configuring Net-SSLeay-1.88 ... OK
Building and testing Net-SSLeay-1.88 ... FAIL
! Installing Net::SSLeay failed. See /root/.cpanm/work/1577105006.3284/build.log for details. Retry with --force to force install it.
! Installing the dependencies failed: Module 'Net::SSLeay' is not installed
! Bailing out the installation for IO-Socket-SSL-2.066.
root@faf6a4b66b08:/app#

Comme on le voit à partir d'un journal de la bibliothèque IO::Socket::SSL besoin d'installer Net::SSLeay, mais Net::SSLeay n'est pas installé. Dans le fichier build.log , vous pouvez voir les détails. Voici un extrait de ce fichier:

cp lib/Net/SSLeay.pod blib/lib/Net/SSLeay.pod
/usr/bin/perl /usr/share/perl/5.18/ExtUtils/xsubpp  -typemap /usr/share/perl/5.18/ExtUtils/typemap -typemap typemap  SSLeay.xs > SSLeay.xsc && mv SSLeay.xsc SSLeay.c
cc -c   -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fstack-protector -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g   -DVERSION=\"1.88\" -DXS_VERSION=\"1.88\" -fPIC "-I/usr/lib/perl/5.18/CORE"   SSLeay.c
SSLeay.xs:163:25: fatal error: openssl/err.h: No such file or directory
 #include  openssl/err.h
                         ^
compilation terminated.
make: *** [SSLeay.o] Error 1

La réussite de la solution

Pour HTTP::Tiny pourrait protocole https vous devez installer la bibliothèque IO::Socket::SSL. Pour installer IO::Socket::SSL vous devez installer Net::SSLeay. Et voici pour installer la bibliothèque Net::SSLeay , vous devez mettre une bibliothèque supplémentaire dans le système.

Sur Ubuntu, cela se fait avec l'aide de la commande:

$ apt-get update && apt-get install -y libssl-dev

Après cela, vous devez installer IO::Socket::SSL:

# cpanm IO::Socket::SSL

Cette équipe a réussi installe la bibliothèque Net::SSLeay et IO::Socket::SSL. Et après cela, HTTP::Tiny être capable de travailler sur le protocole https.

Autres articles