त्रुटि सुधार IO::Socket::SSL 1.56 must be installed for https support

में पर्ल प्रोग्रामिंग भाषा, वहाँ रहे हैं कई पुस्तकालयों का उपयोग कर सकते हैं डाउनलोड करने के लिए इंटरनेट से डेटा प्रोटोकॉल HTTP. सबसे प्रसिद्ध है LWP और HTTP::Tiny. पुस्तकालय HTTP::Tiny के साथ आता है पर्ल, यह आवश्यक नहीं है स्थापित करने के लिए अतिरिक्त, इसलिए, यह अक्सर करने के लिए सुविधाजनक डेटा डाउनलोड के साथ यह.

सफल डाउनलोड HTML पृष्ठ प्रोटोकॉल http

यहाँ कोड का एक उदाहरण है कि भार के होम पेज http://example.com. इस उदाहरण में का उपयोग करता है http और नहीं 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;

यदि आप इस कोड को चलाने, आप देख सकते हैं कि सब कुछ काम करता है. का दर्जा प्राप्त 200. क्षेत्र successमूल्य सच है (इस पाठ की सुविधा के लिए प्रदर्शन, डेटा संरचनाओं क्षेत्रों content के मूल्य बदल गया था, के बजाय के html कोड पृष्ठ द्वारा लिखित तीन डॉट्स):

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

Https का उपयोग करते समय त्रुटि

लेकिन अगर आप एक छोटे से बदल इस कोड को लोड करने के लिए डेटा https पर है, तो डेटा लोड नहीं है. यहाँ कोड के कार्यक्रम:

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

यहाँ उत्पादन इस कार्यक्रम से:

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

क्षेत्र के मूल्य status 599 (इस विशेष स्थिति में आविष्कार किया गया था पुस्तकालय HTTP::Tiny, इसका मतलब है कि समस्या है पुस्तकालय के साथ). मूल्य success गलत है, और content वहाँ है क्यों की एक व्याख्या त्रुटि उत्पन्न हुई: IO::Socket::SSL 1.56 must be installed for https support.

को हल करने की कोशिश

हाँ. करने के लिए HTTP::Tiny पर काम करने के लिए https करने के लिए की जरूरत पुस्तकालय IO::Socket::SSL.

की कोशिश करने के लिए उसे डाल के साथ cpanm, लेकिन त्रुटि मिलती है:

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#

के रूप में आप देख सकते हैं प्रवेश से पुस्तकालय के लिए IO::Socket::SSL की जरूरत है स्थापित करने के लिए Net::SSLeay, लेकिन Net::SSLeay स्थापित नहीं है,. फ़ाइल में build.log आप विवरण देख सकते हैं. यहाँ का एक टुकड़ा है कि फ़ाइल:

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

एक सफल समाधान

करने के लिए HTTP::Tiny पर काम कर सकता है प्रोटोकॉल https पुस्तकालय स्थापित करने की जरूरत IO::Socket::SSL. स्थापित करने के लिए IO::Socket::SSL की जरूरत है स्थापित करने के लिए Net::SSLeay. लेकिन पुस्तकालय स्थापित करने के लिए Net::SSLeay आप की जरूरत है डाल करने के लिए एक अतिरिक्त पुस्तकालय प्रणाली के लिए.

Ubuntu पर इस के साथ किया जाता है आदेश:

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

इस के बाद आप की जरूरत है स्थापित करने के लिए IO::Socket::SSL:

# cpanm IO::Socket::SSL

इस आदेश को सफलतापूर्वक स्थापित पुस्तकालय Net::SSLeay और IO::Socket::SSL. और फिर HTTP::Tiny में सक्षम हो जाएगा पर काम करने के लिए प्रोटोकॉल https.

अन्य लेख