如何捕捉Apache2 CGI中的参数值?

问题描述 投票:4回答:6

我在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服务器上做更多的配置来读取帖子的数据吗?

bash web-applications shell apache2 cgi
6个回答
4
投票

POSTs将通过STDIN来实现。

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

但是如果可以的话,你真的应该考虑使用perl(或者python、PHP等),就像Glenn Jackman建议的那样。


2
投票

整个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。不过,我没能成功。


2
投票

对不起,这几个月没人回答你的问题。 这个可以用。

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

你必须在binbash后面插入一个空行(如果不是echo, printf "\n" 就可以了)


1
投票

这是很好的关于CGI协议的文档。http:/hoohoo.ncsa.illinois.educgi

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


0
投票

试试

echo $1

而不是

echo $SEARCHKEY

0
投票

试试这个脚本来列出你输入的内容。

#!/bin/bash
echo 'content length:'$CONTENT_LENGTH
read StringInBox
echo $StringInBox
© www.soinside.com 2019 - 2024. All rights reserved.