我在Ubuntu上有一个小小的apache2 CGI应用程序。CGI处理程序是bash shell脚本。我的客户端程序是 搜索.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 request的值需要从STDIN中读取数据.我按照Ithcy的建议尝试了如下方法
#!/bin/bash
echo post=$(</dev/stdin)
echo 'content length:'$CONTENT_LENGTH
echo 'content:'$post
它只显示这些。
content length:30
content:
为什么内容什么都没有 我需要在Apache服务器上做更多的配置来读取帖子的数据吗?
POSTs将通过STDIN来实现。
#!/bin/bash
POST=$(</dev/stdin)
echo $POST
但是如果可以的话,你真的应该考虑使用perl(或者python、PHP等),就像Glenn Jackman建议的那样。
整个querystring是在 $QUERY_STRING
变量。你可以通过运行 env
在你的shell脚本中没有参数。
例如,只获取searchKey的值。
echo $QUERY_STRING | sed 's/searchKey\=\([^&]\+\).*/\1/'
更新: 对不起,这只适用于你使用GET发布表单的情况。我没看清楚细节
如果你真的需要阅读POST,这个页面可能会帮助你。http:/digitalmechanic.wordpress.com20080221handling-post-data-in-bash-cgi-scripts。不过,我没能成功。
对不起,这几个月没人回答你的问题。 这个可以用。
#!/bin/bash
echo
echo post=$(</dev/stdin)
echo 'content length:'$CONTENT_LENGTH
echo 'content:'$post
你必须在binbash后面插入一个空行(如果不是echo, printf "\n" 就可以了)
这是很好的关于CGI协议的文档。http:/hoohoo.ncsa.illinois.educgi
我建议你考虑使用一种具有良好CGI库的语言(如Perl),这样你就不必重新发明一个多年前就已经完善的轮子。
试试
echo $1
而不是
echo $SEARCHKEY
试试这个脚本来列出你输入的内容。
#!/bin/bash
echo 'content length:'$CONTENT_LENGTH
read StringInBox
echo $StringInBox