오류정정 IO::Socket::SSL 1.56 must be installed for https support

에서는 Perl 프로그래밍 언어 여러 가지가 있 라이브러리를 사용할 수 있는 에서 데이터를 다운로드 인터넷 프로토콜 HTTP. 가장 유명한 LWPHTTP::Tiny. 라이브러리 HTTP::Tiny 께서는 Perl,그것은 필요하지 않습을 추가로 설치, 따라서,그것은 종종 편리한 데이터를 다운로드합니다.

성공적으로 다운로드 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 당신해 추가 라이브러리하는 시스템입니다.

우분투에서 이것은 명령:

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

후에 이를 설치해야 합 IO::Socket::SSL:

# cpanm IO::Socket::SSL

이 명령을 성공적으로 설치하는 라이브러리 Net::SSLeayIO::Socket::SSL. 다음 HTTP::Tiny 이에서 작동 할 수 있는 프로토콜 https.

다른 기사