【问题标题】:Downloading a file from web using Perl CGI.pm使用 Perl CGI.pm 从 Web 下载文件
【发布时间】:2020-06-22 17:55:25
【问题描述】:

我正在尝试编写 Perl 脚本以从 Web 下载文件然后对其进行处理。我的服务器空间中只安装了CGI.pm。请多多指教。

【问题讨论】:

标签: perl


【解决方案1】:

我想你有点困惑。如果您尝试下载文件,那么 CGI.pm 对您没有用处。 CGI.pm 帮助您编写 CGI 程序;它无法帮助您下载文件。

要从 Web 服务器下载文件,您需要充当 Web 客户端的东西。浏览器是一个 Web 客户端,但我们需要一个类似的程序 - 发送 HTTP 请求并处理 HTTP 响应。

最明显的选项是LWP::Simple。这包括一个名为getstore() 的函数。

my $code = getstore($url, $file);

你说这对你不可用。为了编写任何复杂的 Perl 程序,您应该找到一个托管它们的地方,让您可以访问许多 Perl 模块(或允许您安装它们)。很多现代 Perl 编程都包含将 CPAN 模块中的功能连接在一起,并且由于无法访问这些功能,您正在严重减少可用的选项。

但还有几个其他选项是标准 Perl 发行版的一部分,应该可供您使用。

HTTP::Tiny 自 2011 年 Perl 5.14 以来一直是核心 Perl 发行版的一部分。您可以使用其mirror() 函数下载您的文件。

File::Fetch 自 2007 年 Perl 5.10 以来一直是 Perl 代码分发的一部分。您可以这样使用它:

use File::Fetch;

my $ff = File::Fetch->new(uri => $your_uri);
# $where will contain the path to the downloaded file
my $where = $ff->fetch or die $ff->error;

【讨论】:

  • 谢谢朋友。我用的是Tripod.com的免费网页吊装。服务器使用的perl版本是5.8左右。cgi-bin目录下可用的perl模块(.pm)有CGI.pm.TripodCGI.pm,TripodPage.pm .我想知道这个模块是否可以用于下载文件。另外我怎么知道这些模块导出的功能?。还有其他替代方法可以用旧的 perl 版本下载文件吗?
  • @jose:正如我所说,CGI.pm 与下载文件完全无关,我不知道你为什么会这么认为。三脚架模块是非标准的,我对它们一无所知——所以你需要问三脚架。但在我看来,Tripod 托管是针对想要编写 Web 应用程序的人。这根本不是你想要的。为什么不在您的 PC 上安装 Strawberry Perl (strawberryperl.com) 并使用它?或者,也许更好的是,使用 WSL (docs.microsoft.com/en-us/windows/wsl) 并获得完整的 Linux 体验。
  • @jose:Perl 5.8 是从 2002 年开始的。它已经足够老了,可以投票了。任何为您提供这么古老的 Perl 版本的人都不关心 Perl 开发人员。因此,如果您打算使用 Perl,我真的建议您寻找其他地方。
  • 好的先生。请评论这个链接stackoverflow.com/questions/15294815/…
  • @jose:所以您可以使用 CGI.pm 创建包含数据的网页。但要访问 Google 表格,您将需要我在回答中讨论过的模块之一。您应该认真考虑获得更好的托管服务。
【解决方案2】:

使用LWP::Simple 是一个很好的起点

【讨论】:

  • 谢谢你。但我想使用 CGI.pm,因为我只能访问该模块。我正在使用三脚架免费网络上传
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-07
  • 2012-11-12
  • 2021-12-16
  • 2015-02-08
  • 1970-01-01
  • 2011-06-07
相关资源
最近更新 更多