【发布时间】:2020-06-19 03:26:44
【问题描述】:
我有两台 Windows 10 机器,在其中一台上,我安装了 Strawberry Perl(如果重要,版本 5.30.1)。我的脚本使用的是 REST::Client,在这台机器上,脚本运行完美。
我正在使用 PAR 制作一个 .exe
我可以运行 .pl 脚本或 .exe 可执行文件;在这台机器上它运行完美。我在运行 pp.bat 时使用--execute 选项,并包含--xargs= 选项,以便脚本可以成功执行和运行。
然后我将 .exe 复制到另一台没有安装 Perl 的机器上。我使用相同的命令行选项启动 .exe,它编译良好并开始运行。它做了一些工作,然后进行了第一个 REST GET。在这台没有 Strawberry Perl 的机器上,我收到一条消息“服务报告永久性错误:如果安装了 LWP::Protocol::https 模块,LWP 将支持 https URL。”
然后,当然,我得到 500 系列错误,因为 REST Web 服务对 GET 缺少 https:// 感到不满。
还有另一个错误:
服务报告永久错误:Can't locate object method "new" via package "LWP::Protocol::https::Socket" at C:\foo\bar\AppData\Local\Temp\baz\qux \inc\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();
谁能看到我在这里遗漏了什么,并给我指点?
【问题讨论】:
-
你能提供一个产生错误的最小例子吗?
-
我使用
LWP::UserAgent尝试了一个简单的脚本,我遇到了和你一样的问题:501 Can't load 'C:\Users\hakon\AppData\Local\Temp\par-68616b6f6e\cache-2fc254075e68b8cca263637e29f9a640f6669c6a\c8c63bf2.xs.dll' for module Net::SSLeay: load_file:The specified module could not be found (LWP::Protocol::https not installed) at script/p.pl line 12.我认为问题在于它是一个需要共享库的 XS 模块。但--module选项似乎只包括.pmfile -
已添加bug report
标签: perl strawberry-perl par