如何在Apache2 CGI中获取参数的值

4

我在Ubuntu上有一个小的apache2 CGI应用程序。CGI处理程序是bash shell脚本。
我的客户端应用程序是search.html

<html>
<body>
<form action="/cgi-bin/search.sh" method="post">
    <input type="text" name="searchKey" size="10"></input>
    <input type=SUBMIT value="search">
<form>
</body>
</html>

首先,我想在服务器端捕获“searchKey”参数的值。我尝试了以下代码,但没有显示任何内容。
search.sh 代码如下:

#!/bin/bash
echo Content-type:text/plain 
echo ""

echo $SEARCHKEY

大家好,你们能告诉我如何在服务器端捕获参数的值吗?

更新

谢谢大家的回答。我明白了要获取POST请求的值需要从STDIN中读取数据。
我尝试了Ithcy建议的方法,如下所示:

#!/bin/bash
echo post=$(</dev/stdin)
echo 'content length:'$CONTENT_LENGTH
echo 'content:'$post

它只显示了这个:

content length:30
content:

为什么内容为空?我需要在Apache服务器上进行更多配置才能读取帖子数据吗? 谢谢。
6个回答

5

POST请求将通过标准输入(STDIN)进行。

#!/bin/bash
POST=$(</dev/stdin)
echo $POST

但如果可以的话,你真的应该考虑使用Perl(或Python、PHP等),正如Glenn Jackman所建议的那样。


2

整个查询字符串可以在$QUERY_STRING变量中表示。您可以通过在shell脚本中不带参数运行env命令来查看此内容。

获取仅搜索关键字(searchKey)值的示例:

echo $QUERY_STRING | sed 's/searchKey\=\([^&]\+\).*/\1/'
更新: 很抱歉,以下内容仅适用于使用 GET 提交表单的情况。我没有仔细阅读细节 =/
如果你确实需要读取 POST 数据,这个页面可能会对你有所帮助: http://digitalmechanic.wordpress.com/2008/02/21/handling-post-data-in-bash-cgi-scripts/,虽然我自己没能让它正常工作。

POST请求通过标准输入传递数据,因此可以像处理其他通过标准输入传递的数据一样进行处理...但我在shell脚本中没有这方面的经验。 - Powerlord

2

很抱歉这些月来没有人回答你的问题。以下是解决方法:

#!/bin/bash
echo
echo post=$(</dev/stdin)
echo 'content length:'$CONTENT_LENGTH
echo 'content:'$post

在/bin/bash后面必须插入一个空行(如果不是echo,则可以使用printf "\n"


使用 </dev/stdin 对我来说是有效的,不像使用 catread - scoobydoo

1

这是关于CGI协议的好文档:http://hoohoo.ncsa.illinois.edu/cgi/

我建议您考虑使用一种具有良好CGI库的语言(如Perl),这样您就不必重新发明已经完善多年的轮子。


0

尝试使用此脚本列出您输入的内容:

#!/bin/bash
echo 'content length:'$CONTENT_LENGTH
read StringInBox
echo $StringInBox

0

尝试

echo $1

替代

echo $SEARCHKEY

klausbyskov,感谢您的回答。但是它仍然没有显示任何内容。 - Nyambaa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接