Передача параметров методом GET
Тут все просто. Все параметры передаются единой строкой (а именно, точно такой же, какая была задана в URL после ?) в переменной QUERY_STRING. Единственная проблема — то, что все данные поступят URL-кодированными. Так что нам понадобится функция декодирования. Но это отдельная тема, пока мы не будем ее касаться.
Для того чтобы узнать значения полученных переменных в Си, нужно воспользоваться функцией getenv(). Вот пример сценария на Си, который это обеспечивает.
Листинг 3.2. Работа с переменными окружения
#include <stdio.h> // Âêëþ÷àåì ôóíêöèè ââîäà/âûâîäà
#include <stdlib.h> // Âêëþ÷àåì ôóíêöèþ getenv()
void main(void) {
// ïîëó÷àåì çíà÷åíèå ïåðåìåííîé îêðóæåíèÿ REMOTE_ADDR
char *RemoteAddr = getenv("REMOTE_ADDR");
// ... è åùå QUERY_STRING
char *QueryString = getenv("QUERY_STRING");
// ïå÷àòàåì çàãîëîâîê
printf("Content-type: text/html\n\n");
// ïå÷àòàåì äîêóìåíò
printf("<html><body>");
printf("<h1>Çäðàâñòâóéòå. Ìû çíàåì î âàñ âñå!</h1>");
printf("Âàø IP-àäðåñ: %s<br>",RemoteAddr);
printf("Âîò ïàðàìåòðû, êîòîðûå Âû óêàçàëè: %s",QueryString);
printf("</body></html>");
}
Откомпилируем сценарий и поместим его в "CGI-каталог". Теперь в адресной строке введем:
http://www.myhost.com/cgi-bin/script.cgi?a=1&b=2
Мы получим примерно такой документ:
Çäðàâñòâóéòå. Ìû çíàåì î Âàñ âñå!
Âàø IP-àäðåñ: 192.232.01.23
Âîò ïàðàìåòðû, êîòîðûå Âû óêàçàëè: a=1&b=2