#1 27.10.07 01:17
[C++/CGI] Как прочитать POSTDATA?
Как можно получить информацию, передаваемую сервером методом POST программе на C++.
Просто хочу изучить что-нибудь новенькое, поэтому, пожалуйста, не надо писать "а зачем тебе на C++, что же там такого, что нельзя сделать на Perl/PHP/ASP?" и т.п. и т.д.
Offline
#3 27.10.07 05:34
Re: [C++/CGI] Как прочитать POSTDATA?
zombie, это ты не понял, что я спросил, а я-то прекрасно это понял!
Я здесь спрашиваю не о том как клиент передаёт по протоколу HTTP запросы серверу, и не о том как все это происходит на уровне сетевых протоколов, а о том как взаимодействуют две программы на одном и том же компьютере - на сервере. Одна из этих программ: HTTP-сервер, а другая CGI-программа.
Для общего развития из http://ru.wikipedia.org/wiki/CGI:
CGI (от англ. Common Gateway Interface — «общий интерфейс шлюза») — стандарт интерфейса, служащего для связи внешней программы с веб-сервером. Программу, которая работает по такому интерфейсу совместно с веб-сервером, принято называть шлюзом, хотя многие предпочитают названия скрипт (сценарий) или CGI-программа.
Сам интерфейс разработан таким образом, чтобы можно было использовать любой язык программирования, который может работать со стандартными устройствами ввода/вывода. Такими возможностями обладают даже скрипты для встроенных командных интерпретаторов операционных систем, поэтому в тех случаях, когда нет нужды в сложной функциональности, могут использоваться даже такие простые командные скрипты.
А теперь, внимание, вопрос, дубль два: клиент передаёт серверу запрос методом POST. Сервер, для обработки этого запроса запускает мою программу, написанную на языке C++. Как из своей программы я могу получить ту информацию, которая передана методом POST в теле запроса?
p.s. В теме же вроде бы написал, что CGI имеется ввиду... хотя может быть не совсем корректно в первый раз сформулировал в чем проблема.
Исправлено AntiGen (27.10.07 05:41)
Offline
#5 27.10.07 07:59
Re: [C++/CGI] Как прочитать POSTDATA?
Код: c:
int content_length; char *input; char *RM=getenv("REQUEST_METHOD"); if(RM==NULL){ exit(1); } if(!strcmp(RM,"GET")){ input=getenv("QUERY_STRING"); if(input==NULL) exit(1); else content_length = strlen(input); } else if(!strcmp(RM,"POST")){ content_length = atoi(getenv("CONTENT_LENGTH")); input = (char*)malloc(sizeof(char) * content_length + 1); if (fread(input,sizeof(char),content_length,stdin) != content_length) exit(1); }
Что-то типа этого.
Исправлено juf (27.10.07 08:01)
Offline

