我正在使用用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)。
答案 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