未通过 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() 获取预期内容的主要内容,如果未能解决你的问题,请参考以下文章
通过letsencrypt设置https后,Nodejs聊天程序'io未定义'错误