在Perl中重定向时如何使用POST发送值?

时间:2014-08-17 20:47:33

标签: perl redirect cgi

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

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

但是这是使用GET请求,是否有办法使用POST执行相同的操作,还是有另一种方法在Perl中重定向时传递值?我知道JSP有一个名为RequestDispatcher的方法,如果POST不可用,Perl中会出现类似的东西吗?

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

编辑:我使用CGI.pm

2 个答案:

答案 0 :(得分:5)

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

据我所知,JSP中的RequestDispatcher不发送HTTP重定向响应,而是在JSP应用程序内部转发当前请求。这可以与您的CGI脚本只是将当前请求分派到同一服务器上的另一个脚本,而无需通过浏览器进行重定向。详细说明如何执行此操作取决于您使用的框架(例如,Dancer,Mojolicious,Catalyst ...或简单的CGI.pm)

答案 1 :(得分:1)

我需要重定向页面并包含POST数据。搜索解决方案只发现帖子说不可能做到。所以......挑战被接受了。

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

我的解决方案:

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

  • 包含要传递的POST数据和所需目标的表单
  • 提交表单的javascript函数
  • 执行javascript
  • 的BODY标记中的'onload'事件

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