【问题标题】:How do I send values with POST when redirecting in Perl?在 Perl 中重定向时如何使用 POST 发送值?
【发布时间】:2014-10-10 18:52:05
【问题描述】:

如果用户输入了正确的组合,我想将两个值传递给另一个页面,一个是名称,另一个是密码。如果用户知道我可以通过在查询字符串中包含值来重定向,例如:

$cgi->redirect('http:someotherpage.com?username=$username&password=$password');

但那是使用 GET 请求,有没有办法使用 POST 来做同样的事情,或者在 Perl 中重定向时是否有另一种方法来传递值?我知道 JSP 有一个名为 RequestDispatcher 的方法,如果 POST 不可用,Perl 中有类似的方法吗?

编辑:我之前找到了这个链接CGI Application Dispatch,但它有点技术性,所以我不知道这是否是适合这项工作的工具。

编辑:我正在使用 CGI.pm

【问题讨论】:

    标签: perl redirect cgi


    【解决方案1】:

    进行 HTTP 重定向时,您只能提供新目标的 URL。这意味着,无法为 POST 请求指定任何数据,因为它们在 URL 之外。

    据我了解,来自 JSP 的 RequestDispatcher 不会发送 HTTP 重定向响应,而是在 JSP 应用程序内部转发当前请求。这相当于让您的 CGI 脚本仅将当前请求分派到同一服务器上的另一个脚本,而不通过浏览器进行重定向。具体如何执行此操作将取决于您使用的框架(例如 Dancer、Mojolicious、Catalyst ... 或普通 CGI.pm)

    【讨论】:

    • 如果不是太麻烦,您能否提供一个代码示例,说明一个 CGI 脚本如何将当前请求发送到同一服务器上的另一个脚本?
    • 那将是白费力气。把你需要的 script2 的逻辑放在 script2 的一个模块中,供两个脚本使用。
    • @ikegami 对不起,script2 是什么?
    • @Stochastic13:编写单个 Web 应用程序(如使用 JSP)而不是使用多个独立脚本。将所有这些脚本的功能作为单独的函数合并到一个脚本中,并根据 PATH_INFO 决定您分派到哪个函数。那么你的“重定向”只是在同一个脚本中调用另一个函数。更好的是,使用现代框架,因为CGI.pm must die.
    • 就像你对其他所有请求所做的那样:在输出标头后将 HTML 打印到 STDOUT。
    【解决方案2】:

    我需要重定向页面并包含 POST 数据。寻找解决方案只发现了一些帖子说这是不可能的。所以...接受了挑战。

    首先是为什么:我有一个使用 POST 数据调用的 perl cgi,并根据传递的数据建立一个表单(文本输入、复选框等)。用户进行更改/选择并提交表单。目标是处理 POST 数据并对数据库执行必要更新的 cgi。然后我想立即重新显示第一个表单,以便可以看到更改的结果。虽然显示表单所需的 POST 数据最少,但我不愿意将其作为 GET 发送。

    我的解决方案:

    在处理完POST数据后,cgi生成另一个HTML页面,其中包括:

    • 带有要传递的 POST 数据和所需目标的表单
    • 提交表单的 javascript 函数
    • 执行 javascript 的 BODY 标记中的“onload”事件

    上面页面的加载几乎不引人注意(如果我不知道它正在发生,我可能不会意识到它。)它就像一个魅力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 2013-09-03
      • 1970-01-01
      • 2014-10-10
      • 2011-01-27
      • 2012-01-13
      相关资源
      最近更新 更多