Как отловить значение параметра в Apache2 CGI - PullRequest
3 голосов
/ 11 января 2010

У меня есть небольшое приложение apache2 CGI на Ubuntu. Обработчиком CGI является скрипт оболочки bash.
Мое клиентское приложение search.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 is:

#!/bin/bash
echo Content-type:text/plain 
echo ""

echo $SEARCHKEY

Ребята, подскажите, как отловить значение параметра на стороне сервера?

UPDATE

Спасибо за все ответы. Я понял, что для получения значения почтового запроса нужно прочитать данные из STDIN.
я пытался как Ithcy предложить, как следующие

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

отображалось только то, что:

content length:30
content:

почему контент ничего не значит? мне нужно больше настроить на сервере Apache для чтения данных поста? Спасибо

Ответы [ 6 ]

4 голосов
/ 11 января 2010

ПОЧТЫ пройдут через STDIN.

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

Но вы действительно должны посмотреть на использование perl (или python, PHP и т. Д.), Если можете, как предлагает Гленн Джекман.

2 голосов
/ 19 декабря 2011

Извините, никто не ответил на ваш вопрос все эти месяцы. Это работает:

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

Вы должны вставить пустую строку после / bin / bash (если не echo, printf "\ n" сделает)

2 голосов
/ 11 января 2010

Вся строка запроса представлена ​​в переменной $QUERY_STRING. Это можно увидеть, запустив env без аргументов в вашем скрипте оболочки.

Пример получения только значения searchKey:

echo $QUERY_STRING | sed 's/searchKey\=\([^&]\+\).*/\1/'

Обновление : извините, это применимо, только если вы используете GET для публикации формы. Я не читал детали = /

Если вам действительно нужно прочитать сообщения POST, эта страница может вам помочь: http://digitalmechanic.wordpress.com/2008/02/21/handling-post-data-in-bash-cgi-scripts/ Но я не получил его на работу.

1 голос
/ 11 января 2010

Это хорошая документация о протоколе CGI: http://hoohoo.ncsa.illinois.edu/cgi/

Я бы посоветовал вам рассмотреть возможность использования языка (такого как Perl) с хорошей библиотекой CGI, чтобы вам не приходилось изобретать колесо, которое было усовершенствовано несколько лет назад.

0 голосов
/ 21 мая 2013

Попробуйте этот скрипт, чтобы получить список содержимого вашего ввода:

#!/bin/bash
echo 'content length:'$CONTENT_LENGTH
read StringInBox
echo $StringInBox
0 голосов
/ 11 января 2010

Попробуйте

echo $1

вместо

echo $SEARCHKEY
...