【问题标题】:Executing Perl/CGI script in AJAX without using server在 AJAX 中执行 Perl/CGI 脚本而不使用服务器
【发布时间】:2017-12-23 05:57:52
【问题描述】:

我有一个 Perl 和一个 CGI 文件,我想通过它从数据库中获取数据。我有一个 UI,我正在尝试使用 AJAX 调用,该调用将访问 perl (.pl) 或 (.cgi) 文件并以 JSON 格式获取响应。我通过命令提示符运行检查了 perl/cgi 文件,它工作正常。这就是我在command prompt 中运行代码的方式:

D:\>PerlExecutables\strawberry_32\perl\bin\perl.exe C:\Users\UserXYZ\Desktop\PerlExamples\test.cgi

原因是我无法在我的机器上进行任何类型的安装,而且我不想通过像 ApacheIIS 这样的服务器运行它。 如何做到这一点?有什么方法可以通过传递perl.exe 执行路径或任何其他替代方法使脚本在 AJAX 中工作?

谢谢!

【问题讨论】:

  • 如果你可以运行 Perl 并部署一个 CGI 脚本,你也可以部署一个 Perl 程序作为本地主机上的 web 服务器。肯定需要一个 HTTP 服务器,浏览器不允许你直接运行程序。
  • 您可能想检查基于 perl 的 Web 服务器,mojolicious.org/perldoc/Mojo/Server/CGI
  • @Thilo 我找到了metacpan.org/pod/HTTP::Daemon,但如果您可以运行提供的示例,则每次 URL 都会不断变化
  • @Ashraf.Shk786:可以在构造函数中指定端口号。请参阅您链接到的页面上的示例。
  • 我正在尝试将use HTTP::Daemon 用于服务器,一旦我从cmd 运行文件server.pl,就会发生一些事情,使命令提示符不可编辑,我可能认为这是服务器启动。我还打印了用于调用该服务器的 url 和端口号。但是,当我尝试打开浏览器并运行带有端口号的 URL 时,我得到了Error 403 : The website declined to show this webpage。我错过了什么吗?

标签: ajax perl cgi


【解决方案1】:

一种方法是使用Plack::App::CGIBin。它允许您使用 PSGI/Plack 协议将 CGI 脚本挂载为应用程序。

use Plack::App::CGIBin;
use Plack::Builder;

my $app = Plack::App::CGIBin->new(root => "/path/to/cgi-bin")->to_app;
builder {
    mount "/cgi-bin" => $app;
};

将其保存为myapp.psgi(或任何你的东西)并像这样运行它:

$ plackup myapp.psgi

默认情况下,它将在 localhost 的 3000 端口上打开一个服务器。您将需要能够安装 Perl 模块。既然你有 Strawberry Perl,那应该不是问题。在最坏的情况下,只需使用 local::lib。

您还需要能够打开一个端口进行监听。如果您不能,除了让管理员为您安装一个真正的全尺寸 Web 服务器之外,没有其他解决方案。


PSGI 协议和 Plack 工具是 CGI 的简单易用的替代品。它们使您可以非常灵活,同时可以轻松地持续运行大型应用程序。

【讨论】:

    猜你喜欢
    • 2014-03-27
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2014-10-13
    相关资源
    最近更新 更多