Strawberry Perl 和 PAR - 在其他 Windows 计算机上运行时错误:如果安装了 LWP::Protocol::https 模块,LWP 将支持 https URL

2024-01-05

我有两台 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::Protocol::https 模块,LWP 将支持 https URL。”

然后,当然,我会收到 500 系列错误,因为 REST Web 服务对 GET 缺少 https:// 感到不满。

还有另一个错误:

该服务报告永久错误:无法通过包“LWP::Protocol::https::Socket”在 C:\foo\bar\AppData\Local\Temp\baz\qux\inc\ 找到对象方法“new” lib/LWP/Protocol/http.pm 第 34 行。

在我用来调用 pp.bat 的 .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();

有人能看到我在这里缺少什么,并给我指点吗?


根据 Par::Packer 的维护者的说法这个 GitHub 问题 https://github.com/rschupp/PAR-Packer/issues/21 :

PAR::Packer 不会打包这些非 Perl DLL 依赖项。你可以 要么完成它们,然后用 pp --link 手动打包它们 ...,[...]。或者使用 Shawn Laffan 的 App::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;
}

您可以使用应用程序::PP::自动链接 https://metacpan.org/pod/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, and /libcrypto-1_1-x64__.dll。转移这个p5.exe到另一台 Windows 10 计算机现在工作正常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Strawberry Perl 和 PAR - 在其他 Windows 计算机上运行时错误:如果安装了 LWP::Protocol::https 模块,LWP 将支持 https URL 的相关文章

  • Log4Perl 将多个程序的日志记录捆绑到一个日志中

    CPAN 上是否有任何 Logger 它允许我将多个程序的日志捆绑到一个文件中 并在两个程序同时运行并并行调用 log4Perl 时同步并行日志记录 背景是我使用一个自定义附加程序来写入电子邮件 我想将所有电子邮件捆绑在一个文件中作为备份
  • 零垫重命名,例如图片 (2).jpg -> 图片 (002).jpg

    我需要按照标题在所有子文件夹中解释的方式重命名所有图像 我正在考虑用正则表达式提取括号内的数字 然后重命名它 搜索周围我看到有类似的工具rename and mmv但我无法让他们重新命名 jpg 我将不胜感激任何解决我的问题的建议 顺便说一
  • 将日期转换为指定格式并比较两个日期

    给定两个日期 Date1 format yyyy mm dd hh mm ss eg 2013 05 21 07 47 21 Date2 format Day Month date hh mm ss yyyy eg Thu Aug 1 09
  • 无法在 Mac 上安装 DBD::mysql

    第一次发帖 格式可能不太对 请见谅 我一直在尝试使用 cpan 在 macOS Catalina 上安装 DBD mysql 但尚未成功 我使用了perlbrew 并尝试了mysql和mariaDB 但仍然没有成功 另外 我在网上研究了不同
  • 使用 Perl 写入文件的最简单方法是什么?

    目前我正在使用 system echo panel login panel password root name root pass port panel type gt gt home shared ftp 使用 Perl 做同样的事情最
  • Mason 方法范围 - 覆盖

    Using Mason2 https metacpan org pod Mason 有 3 个组件 Base mc tmp Base mc tmp index mc The tmp index mc内容 hello from the Som
  • Perl 中的“@_”有什么作用?

    我浏览了一些我在 Perl 类中编写的代码 我注意到了这一点 my string my stringarray split string 我想知道两件事 变量位于括号中的第一行 这是声明多个变量时所做的事情 如果我删除它们 它仍然可以正常工
  • 有没有对数字(千)进行分组的函数?

    小 模块中是否隐藏着一个函数 它为我执行此操作 my var 23654325432 var reverse var var s d 3 K d g var reverse var I like 数字 格式 http search cpan
  • Perl LWP::简单 HTTPS 错误

    我正在尝试获取网站的内容并打印 该代码按照我希望的方式在常规 HTTP 网站上运行 但它不适用于 HTTPS 我已经查找了此问题的修复程序 但它们在我的程序中不起作用 这是我目前拥有的代码 usr bin perl use strict u
  • Perl6:我怎样才能使所有警告都是致命的?

    我怎样才能使 Perl6 中的所有警告都是致命的 以便脚本在屏幕上出现警告时立即终止 CONTROL when CX Warn note exit 1 更频繁地死亡 该脚本终止于CONTROL when CX Warn note exit
  • 如何在没有循环的情况下初始化哈希中的值?

    我正在尝试找出一种无需经过循环即可初始化哈希的方法 我希望使用切片来实现这一点 但它似乎没有产生预期的结果 考虑以下代码 usr bin perl use Data Dumper my hash hash currency symbol B
  • 如何使用 Net::SSH::Perl 和公钥?

    我正在尝试使用Net SSH Perl使用公钥与此代码进行连接 my ssh Net SSH Perl gt new host debug gt 1 die 我将密钥放在 root ssh id rsa 和 root ssh identit
  • 如何从 R 运行带有特定模块的 perl 脚本?

    我可以从终端运行 perl 脚本 myperlscript pl 没有任何问题 但是 如果我尝试从 RStudio 中运行相同的 perl 脚本 则会出现以下错误 command lt myperlscript pl outputfile
  • 在压缩存档内的文本文件上运行“head”,而不解压存档

    问候 我接手了之前的团队并编写了处理 csv 文件的 ETL 作业 我在 ubuntu 上结合使用 shell 脚本和 perl csv 文件很大 它们以压缩档案形式到达 解压后 很多都超过 30Gb 是的 那是 G 旧进程是在 cron
  • 如何确保我的代码永远不会直接退出?

    eval require file subsequent code goes here If file包含一个exit语句 后面的代码就没有机会运行 如何解决以便后续代码始终有机会运行eval已经完成了 中止是不可能的exit call f
  • 如何使用 Perl 更改 mysql 密码

    我需要使用 Perl 脚本更改一些 mysql 密码 以下内容在更改数据库条目时有效 但是当我针对 mysql 用户更改修改它时 它将它们重置为空白密码 最后 刷新权限 也很好 但我还没有找到方法 usr bin perl use DBI
  • 为什么我只得到第一个捕获组?

    https stackoverflow com a 2304626 6607497 https stackoverflow com a 2304626 6607497 and https stackoverflow com a 370042
  • grep 通过彩色文本,例如海湾合作委员会 |颜色gcc | grep 正则表达式

    在 grep 管道输出时 如何使 grep 尊重 ANSI 颜色转义 我很高兴使用其他东西 perl 而不是 grep 我的用户案例 我想要 gcc foobar c colorgcc grep regexp ls color grep f
  • 使用包管理器时如何管理 Perl 模块?

    A 最近的问题 https stackoverflow com questions 397817 unable to find perl modules in intrepid ibex ubuntu这让我开始思考 在我尝试过的大多数 Li
  • Perl 三元条件运算符

    我正在尝试在脚本中编写更高效的代码 并且有时会实现三元条件运算符 我不明白为什么在循环中使用三元条件运算符时会得到额外的结果 usr bin perl use strict use warnings my array Serial 123

随机推荐