【问题标题】:Perl LWP::Simple won't "get" a webpage when running from remote serverPerl LWP::Simple 从远程服务器运行时不会“获取”网页
【发布时间】:2016-06-21 18:18:20
【问题描述】:

我正在尝试使用 Perl 来抓取出版物列表,如下所示:

use XML::XPath;
use XML::XPath::XMLParser;
use LWP::Simple;

my $url = "https://connects.catalyst.harvard.edu/Profiles/profile/xxxxxxx/xxxxxx.rdf";

my $content = get($url);
die "Couldn't get publications!" unless defined $content;

当我在本地 (Windows 7) 机器上运行它时,它运行良好。当我尝试在我们托管一些网站的 linux 服务器上运行它时,它就死了。我使用 cpan 安装了 XML 和 LWP,所以它们应该在那里。我想知道问题是否可能是服务器上的某种安全性或权限(阻止它访问外部网站),但我什至不知道从哪里开始。有任何想法吗?

【问题讨论】:

  • 你试过看看$! 说了什么吗?
  • $!说“没有这样的文件或目录”,所以它可能被阻止访问外部 URL。现在我需要弄清楚如何解锁它。
  • $! 仅在进行返回 false 的系统调用后才有意义。你没有进行系统调用。同样,您需要使用 LWP::UserAgent 来查看错误消息。
  • 可能的可能性(无特定顺序): *) 被防火墙阻止。 *) 证书问题。 *) 需要代理。 *) SELinux 或其他强化系统阻止传出连接。
  • @Compysaurus 太棒了!请写下答案,以便将来的访问者更容易看到您的所作所为。

标签: perl lwp


【解决方案1】:

原来我没有安装 LWP::Protocol::https"。我通过切换发现了这个

LWP::Simple  

LWP::UserAgent 

并添加以下内容:

my $ua = LWP::UserAgent->new;
my $resp = $ua->get('https://connects.catalyst.harvard.edu/Profiles/profile/xxxxxx/xxxxxxx.rdf' );
print $resp;

然后它返回一个错误,告诉我它没有协议来访问没有 LWP::Protocol::https 的 https,所以我安装了它

cpan LWP::Protocol::https

一切都很好。

【讨论】:

    猜你喜欢
    • 2021-11-11
    • 2013-05-19
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 2020-10-28
    相关资源
    最近更新 更多