Strawberry Perl и PAR - ошибка времени выполнения на другом компьютере Windows: LWP будет поддерживать URL-адреса https, если установлен модуль LWP :: Protocol :: https - PullRequest
2 голосов
/ 19 июня 2020

У меня две машины Windows 10, и на одной из них я установил Strawberry Perl (версия 5.30.1, если это важно). Мой сценарий использует REST :: Client, и на этом компьютере сценарий работает отлично.

Я использую PAR для создания .exe

Я могу запустить либо сценарий .pl, либо исполняемый файл .exe; на этой машине работает отлично. Я использую параметр --execute, когда запускаю pp.bat, и включаю параметр --xargs=, чтобы сценарий мог успешно выполняться и запускаться.

Затем я копирую .exe на другой компьютер, который не установлен Perl. Я запускаю .exe с тем же параметром командной строки, он отлично компилируется и начинает работать. Он выполняет некоторую работу, а затем выполняет первый REST GET. На этом компьютере без Strawberry Perl я получаю сообщение «Служба сообщает о постоянной ошибке: LWP будет поддерживать URL-адреса https, если установлен модуль LWP :: Protocol :: https».

Затем, Конечно, я получаю ошибки серии 500, потому что веб-служба REST недовольна отсутствием https: // для GET.

Есть еще одна ошибка:

служба сообщает о постоянной ошибке: не удается найти метод объекта "новый" через пакет "LWP :: Protocol :: https :: Socket" в C: \ foo \ bar \ AppData \ Local \ Temp \ baz \ qux \ inc \ lib / LWP / Protocol / http.pm строка 34.

В файле .bat, который я использую для вызова pp.bat, у меня есть --module="LWP::Protocol::https" - хотя, похоже, это не так. имеет значение, есть он или нет.

Я вижу некоторую документацию о LWP :: UserAgent и указываю protocols_allowed => ['https'], но я не уверен, как это следует применять для использования в REST :: Client. Я пробовал вставить его (и оставить), и мои результаты такие же. Эта часть моего кода выглядит так:

    my $client = REST::Client->new();

    $client->addHeader( 'charset',       'UTF-8' );
    $client->addHeader( 'Accept',        'application/xml' );
    $client->addHeader( 'Authorization', $login_string );
    $client->addHeader( 'Content-Type',  'application/xml' );
    $client->getUseragent()->ssl_opts( verify_hostname => 0 );
    $client->getUseragent()->ssl_opts( SSL_verify_mode => 0 );
    $client->getUseragent( protocols_allowed => ['https'] );
    $client->setTimeout( 10 );

    $client->setHost( $host );

    $client->GET( $url );

    my $rest_client_reponse_code = $client->responseCode();

Может ли кто-нибудь увидеть, что мне здесь не хватает, и дать мне указатель?

1 Ответ

2 голосов
/ 19 июня 2020

Согласно разработчику Par :: Packer в , эта проблема GitHub :

PAR :: Packer не упаковывает эти не- Perl DLL-зависимости. Вы можете либо выполнить их, либо явно упаковать вручную с помощью pp --link ..., [...]. Или используйте приложение Shawn Laffan :: PP :: Autolink, которое сделает это за вас.

Итак, с учетом этого тестового скрипта p.pl:

use strict;
use warnings;
use LWP::UserAgent;

my $ua = LWP::UserAgent->new();
my $res = $ua->get( 'https://metacpan.org/pod/pp');
if ($res->is_success) {
  print "ok\n";
}
else {
  die $res->status_line;
}

Вы можете использовать App :: PP :: Autolink вот так:

> pp_autolink -o p5.exe p.pl
Use of uninitialized value $_ in pattern match (m//) at C:\Strawberry\perl\site\lib/App/PP/Autolink.pm line 127.
Use of uninitialized value $_ in -e at C:\Strawberry\perl\site\lib/App/PP/Autolink.pm line 128.
DLL check iter: 1
DLL check iter: 2
DLL check iter: 3

Unable to locate these DLLS, packed script might not work:

Alien sys dlls added:
Detected link list: --link c:\strawberry\c\bin/libssl-1_1-x64__.dll --link c:\strawberry\c\bin/zlib1__.dll --link c:\strawberry\c\bin/libcrypto-1_1-x64__.dll
CMD:pp --link c:\strawberry\c\bin/libssl-1_1-x64__.dll --link c:\strawberry\c\bin/zlib1__.dll --link c:\strawberry\c\bin/libcrypto-1_1-x64__.dll -o p5.exe p.pl

Как видно из вышеприведенного вывода, нам не хватало libssl-1_1-x64__.dll, zlib1__.dll и /libcrypto-1_1-x64__.dll. Теперь передача этого p5.exe на другой компьютер Windows 10 работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...