未通过 https 使用 LWP::UserAgent get() 获取预期内容

Posted

技术标签:

【中文标题】未通过 https 使用 LWP::UserAgent get() 获取预期内容【英文标题】:Not getting expected content with LWP::UserAgent get() over https 【发布时间】:2021-04-09 14:57:30 【问题描述】:

以下返回

[HTTP::Response=HASH(0x2ad70dc)] [如果安装了 LWP::Protocol::https 模块,LWP 将支持 https URL。 ]

#!"\xampp\perl\bin\perl.exe"
use strict;
use warnings;
use LWP::UserAgent;
print   "Content-Type: text/html\n\n";
my $ua = LWP::UserAgent->new(ssl_opts =>  verify_hostname => 1 );
my $res = $ua->get("https://news.ycombinator.com/item\?id=25614167");
print "[".$res."]";
print "[".$res->decoded_content."]";

我已经安装了“LWP::Protocol::https”。 "cpanm LWP::Protocol::https" 返回 "LWP::Protocol::https 是最新的。(6.10)"

我已经尝试以多种不同的方式编写上述内容并指向不同的 HTTPS 站点;它适用于 HTTP 站点,我安装了“Net::SSL”(“Crypt::SSLeay”是最新的。(0.72)),没有防火墙,重新安装了最新的 XAMPP 服务器,安装了最新的 Strawberry Perl 代替XAMPP 一个,想法用完了,欢迎提出任何建议。

编辑; shebang 行实际上指向 Strawberry Perl 便携,我用这个替换了 XAMPP Perl 文件夹,所以我不需要在所有脚本中更改 shebang 行。 - 但我也尝试过使用 XAMPPs perl,结果相同。

编辑2;因为我在这个网站上收到关于回答 cmets 的警告,所以我会在这里回答并清除我的回复。

@TLP,$^X 是 "D:\xampp\perl\bin\perl.exe" 安装了新的不可移植,更改了 shebang,$^X 现在是 "C:\Strawberry\perl\bin\perl. exe”,但结果与上述相同。 httpd-perl.conf 不是我安装中的文件,无论如何这不是问题的上游,它正在运行 Perl,它的 Perl 没有正确运行它的模块..?

@stevieb, perl 5, version 32, subversion 0 (v5.32.0) 为 MSWin32-x86-multi-thread-64int 构建

@Steffen Ullrich,不确定如何使用“perl -MLWP::Protocol::https -e ''”,但经过一些研究,我使用了 eval();要测试模块是否存在,“LWP::UserAgent”确实存在,但“LWP::Protocol::https”不存在,即使 cmd 中的“cpanm LWP::Protocol::https”返回“LWP::Protocol:: https 是最新的。(6.10)“。与 IO::Socket::SSL 和 Net::SSLeay 相同。所以这就是问题所在,现在不确定要解决它。

@TLP, "perldoc -l LWP::Protocol::https" 返回 "C:\Strawberry\perl\site\lib\LWP\Protocol\https.pm",它存在并且是 v6.10。 “打印@INC;”清单; “C:\Strawberry\perl\bin\perl.exe C:/Strawberry/perl/site/lib C:/Strawberry/perl/vendor/lib C:/Strawberry/perl/lib”。 所以它应该在“C:/Strawberry/perl/site/lib”中找到它..?

【问题讨论】:

您没有使用 Strawberry perl 二进制文件,您使用的是 xmapp perl 二进制文件,如您的 shebang 所示。 ...所以您需要使用 xampp 附带的cpan(或获取cpanm 以使用perl 或者相反,你可以让你的脚本使用你的 SP 而不是你的 xampp 的 Perl。 @jobeSW shebang 可能不相关。尝试打印$^X 可执行文件名,看看正在使用哪个。 尝试实际加载文件,即perl -MLWP::Protocol::https -e ''。可能是缺少依赖项。请注意,您最好使用 Net::SSLeay + IO::Socket::SSL,而不是 Crypt::SSLeay。另请参阅 Crypt::SSLeay 文档中的 DO YOU NEED Crypt::SSLeay? 关于此内容。 【参考方案1】:

感谢大家的建议,今天我真的学到了很多。

但最终,解决方案是在 D: 上重新安装 XAMPP,并将 shebang 指向在 C: 上安装的 msi 草莓 Perl。没有其他组合适合我。

我还没有真正了解到底发生了什么,但是这个解决方案可以让我继续我的项目。

【讨论】:

以上是关于未通过 https 使用 LWP::UserAgent get() 获取预期内容的主要内容,如果未能解决你的问题,请参考以下文章

@font-face EOT 未通过 HTTPS 加载

@ font-face EOT未通过HTTPS加载

通过letsencrypt设置https后,Nodejs聊天程序'io未定义'错误

IIS:SSL 站点未通过 https 响应所有浏览器/设备

在 https 下未加载重力表单,未定义 jQuery

Datatable Jquery 显示错误,通知请求未安全发出,使用 HTTPS