У меня две машины 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();
Может ли кто-нибудь увидеть, что мне здесь не хватает, и дать мне указатель?