How to get POST parameters from CGI scripts writte

2020-02-11 06:05发布

问题:

I'm writing a web application using CGI scripts written in bash.

For GET requests, the request parameters are available in a variable named $QUERY_STRING. However, I'm unable to figure out where the similar value would be stored for POST requests.

I'm using the following script:

#!"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

And this is what I get:

$ 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"

How can I retrieve the values sent over POST requests?

(If it matters, I'm using Apache 2.4).

回答1:

When using the POST method. The POST values will be the input to your CGI program. So in bash just use

read POST_STRING

POST_STRING then contains the POST values in the same format as QUERY_STRING holds the values for a GET request.