2010-01-11 50 views
3

我在Ubuntu上有一个小的apache2 CGI应用程序。 CGI处理程序是bash shell脚本。
我的客户端应用程序是search.html如何捕捉Apache2中的参数值CGI

<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 

家伙,你能告诉我如何捕捉在服务器端的参数值?

UPDATE

谢谢所有answers.I了解,获得POST请求的值需要从标准输入读取数据。
我试图为Ithcy建议像下面

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

有人只显示:

content length:30 
content: 

为什么是什么内容?我是否需要在Apache服务器上进行更多配置以读取发布数据? 由于

回答

4

POSTs将通过STDIN来。但如果可以的话,你应该看看使用perl(或python,PHP等),正如Glenn Jackman所说的那样。

0

尝试

echo $1 

代替

echo $SEARCHKEY 
+0

klausbyskov,谢谢你的回答。 但它仍然没有显示 – Nyambaa 2010-01-11 11:55:47

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/ 虽然我没有得到它的工作。

+0

埃米尔,谢谢。 该链接很有用。 – Nyambaa 2010-01-11 14:39:40

+0

POSTs只是通过stdin传递数据,因此可以像通过stdin传递的任何其他数据一样进行处理......我在shell脚本中没有经验。 – Powerlord 2010-01-11 16:28:33

1

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

我建议你考虑使用的语言(如Perl)具有良好的CGI库,所以你不必重新发明一个已经完善了轮多年前。

+0

+1使用perl而不是bash来处理CGI。 – glomad 2010-01-11 16:19:26

2

对不起没有人回答你这个月的所有问题。这工作:

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

您必须插入一个空行之后/斌/庆典(如果没有回音,的printf“\ n”会做)

+0

使用' scoobydoo 2017-09-05 14:49:56

0

试试这个脚本列出您输入的内容:

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