如何从用bash编写的CGI脚本中获取POST参数?

时间:2015-06-12 12:12:00

标签: bash shell post cgi

我正在使用用bash编写的CGI脚本编写Web应用程序。

对于GET个请求,请求参数在名为$QUERY_STRING的变量中可用。但是,我无法确定POST次请求的类似值的存储位置。

我使用以下脚本:

#!"c:/msys64/usr/bin/bash.exe"
# On *nix, replace above with #!/bin/bash

echo -en "Status: 200 OK\r\n"
echo -en "Content-type: text/plain\r\n\r\n"

declare -x
declare -a

这就是我得到的:

$ curl -so - --data "abc=ZZZZZZ&d=PPPPPPPP" http://localhost/cgi-bin/test.sh | grep ZZZZZZ

$ curl -so - "http://localhost/cgi-bin/test.sh?abc=ZZZZZZ&d=PPPPPPPP" | grep ZZZZZZ
declare -x QUERY_STRING="abc=ZZZZZZ&d=PPPPPPPP"
declare -x REQUEST_URI="/cgi-bin/test.sh?abc=ZZZZZZ&d=PPPPPPPP"

如何检索通过POST次请求发送的值?

(如果重要的话,我使用的是Apache 2.4)。

2 个答案:

答案 0 :(得分:5)

使用POST方法时。 POST值将是CGI程序的输入。所以在bash中只需使用

read POST_STRING

POST_STRING然后包含POST值,其格式与QUERY_STRING保存GET请求的值相同。

答案 1 :(得分:-1)

使用POST_STRING更加清晰,我正在共享简单的bash脚本:

#!/usr/bin/bash

read POST_STRING
echo "Content-type: text/html"
echo ""

echo "<p><strong>List of all files in </strong><code>/</code><strong> as of </strong><em>`date`</em></p>"
echo $POST_STRING
  
files=($(ls /))
echo "<br></br>"  
for file in "${files[@]}"
do
echo "<code>$file</code><br>"
done

对我来说,用于传递参数的html是:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>my title</title>
</head>
<body>

<form action="/cgi-bin/try.sh" method="POST">

Username: <input  type="text" name="username" />
<br/>
Email Address: <input type="text" name="emailaddress"/>

<input type="submit" value="Submit"/>
</form>
</body>
</html>

提交后的结果,因此您现在可以从字符串中获取参数: enter image description here