Koreksi kesalahan IO::Socket::SSL 1.56 must be installed for https support

Dalam bahasa pemrograman Perl ada beberapa library yang dapat anda gunakan untuk men-download data dari Internet Protocol HTTP. Yang paling terkenal adalah LWP dan HTTP::Tiny. Perpustakaan HTTP::Tiny dilengkapi dengan Perl, hal ini tidak perlu untuk menginstal tambahan, oleh karena itu, hal ini sering mudah untuk men-download data dengan itu.

Sukses download HTML halaman Protokol http

Berikut adalah contoh kode yang memuat halaman rumah http://example.com. Dalam contoh ini menggunakan http dan 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;

Jika anda menjalankan kode ini, anda dapat melihat bahwa segala sesuatu bekerja. Menerima status 200. Bidang successnilai adalah benar (dalam teks ini untuk kenyamanan tampilan, struktur data yang memiliki bidang content nilai itu berubah, bukan kode html dari halaman yang ditulis oleh tiga titik):

$ 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'
        };

Kesalahan saat menggunakan https

Tetapi jika anda mengubah sedikit kode ini memuat data melalui https, maka data ini tidak dimuat. Berikut ini adalah kode program:

#!/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;

Berikut ini adalah output dari program ini:

$ 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
'
        };

Nilai dari field status 599 (status ini khusus diciptakan di perpustakaan HTTP::Tiny, itu berarti bahwa masalah adalah dengan perpustakaan). Nilai success adalah palsu, dan content ada penjelasan mengapa terjadi kesalahan: IO::Socket::SSL 1.56 must be installed for https support.

Cobalah untuk memecahkan

Ya. Untuk HTTP::Tiny untuk bekerja melalui https perlu ke perpustakaan IO::Socket::SSL.

Cobalah untuk menempatkan dia dengan cpanm, tapi mendapatkan error:

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#

Seperti yang anda lihat dari log untuk perpustakaan IO::Socket::SSL perlu menginstal Net::SSLeay, tapi Net::SSLeay tidak diinstal. Dalam file build.log anda dapat melihat rincian. Berikut adalah cuplikan dari file tersebut:

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

Solusi sukses

Untuk HTTP::Tiny bisa bekerja pada Protokol https perlu menginstal perpustakaan IO::Socket::SSL. Untuk mengatur IO::Socket::SSL perlu menginstal Net::SSLeay. Tapi untuk menginstal perpustakaan Net::SSLeay yang anda butuhkan untuk menempatkan perpustakaan tambahan untuk sistem.

Pada Ubuntu ini dilakukan dengan perintah:

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

Setelah ini, anda perlu menginstal IO::Socket::SSL:

# cpanm IO::Socket::SSL

Perintah ini akan berhasil menginstal perpustakaan Net::SSLeay dan IO::Socket::SSL. Dan kemudian HTTP::Tiny akan dapat bekerja pada Protokol https.

Artikel lainnya