|
|
|
| Если я хочу написать на C веб-приложение, то как достать POST/GET данные? Я так понимаю, что они должны быть в переменных окружения или нет? Во всяком случае при таком коде:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[], char *env[])
{
...
} |
в env переменные окружения, подобные тем, что в $_SERVER языка PHP.
А остальное как достать? | |
|
|
|
|
|
|
|
для: 00
(21.09.2008 в 13:28)
| | По-моему, getenv("QUERY_STRING").. хотя я это писал на Perl, когда делал свой парсер входящих данных, но вдруг.. здесь тоже | |
|
|
|
|
|
|
|
для: bronenos
(26.11.2008 в 01:06)
| | У меня почему-то не получилось как в perl
в perl POST-данные читаются из stdin как-то похоже на это
my $length = (defined $ENV{'CONTENT_LENGTH'} ) ? $ENV{'CONTENT_LENGTH'}: 0;
sysread STDIN, $text, $length = ($length > 4096) ? 4096 : $length; |
Попробовал получить строку из stdin
возвращало пустую строку и определяло размер как 1
такой простой код
#include <stdio.h>
main( int argc, /* Числo стрoк в массиве argv */
char *argv[], /* Массив стрoк параметрoв кoманднoй стрoки */
char **envp ) /* Массив стрoк переменных oкружения */
{
printf("Content-type:text/html; charset=cp1251\n\n<pre>\n");
int count;
char string[255];
/* command-line argumentS */
printf( "\nCommand-line arguments:\n" );
for( count = 0; count < argc; count++ )
printf( " argv[%d] %s\n", count, argv[count] );
/* environment variable. */
printf( "\nEnvironment variables:\n" );
while( *envp != NULL )
printf( " %s\n", *(envp++) );
if (!getenv("REQUEST_METHOD")) goto NOHTTP;
char *rem = getenv("REQUEST_METHOD");
printf("\n\n%s\n", rem);
if (strcmp(rem, "POST") == 0) {
printf("\n<h1>post</h1>\n");
int *port = getenv("REMOTE_PORT");
printf("\n\n%s\n\n", port);
}
if (!getenv("QUERY_STRING")) printf("программа вызвана не http-сервером\n");
printf("<form method=\"post\">\n<input name=\"x\" type=\"text\">\n");
printf("<input type=\"submit\" value=\"send\">\n</form><pre>\n");
int col= getenv("CONTENT_LENGTH");
printf("CONTENT_LENGTH = %i;\n", col);
NOHTTP: getch();
return 0;
} |
почему-то пишет CONTENT_LENGTH = 4009311; внизу,
и CONTENT_LENGTH = 0; выше
если отправить пару букв и REQUEST_METHOD будет POST
(запускал на denwer под win) | |
|
|
|
|
|
|
|
для: exp
(26.11.2008 в 23:13)
| | getenv возвращает char* (потому у вас, видимо, число представляет собой адрес на нее), я неуверен в ее содержимом, но конвертаните ее в число
P.S. Плохой стиль считается goto
Напишите
if (!getenv(...))
{
getch();
return 0;
} |
| |
|
|
|
|
|
|
|
для: bronenos
(27.11.2008 в 01:15)
| | Спасибо.
Получилось.
#include <stdio.h>
main( int argc, char *argv[], char **envp )
{
printf("Content-type:text/html; charset=cp1251\n\n<pre>\n");
int count;
char string[255];
/* command-line argumentS */
printf( "\nCommand-line arguments:\n" );
for( count = 0; count < argc; count++ )
printf( " argv[%d] %s\n", count, argv[count] );
/* environment variable. */
printf( "\nEnvironment variables:\n" );
while( *envp != NULL )
printf( " %s\n", *(envp++) );
if (!getenv("REQUEST_METHOD")) {
getch();
return 0;
}
char *rem = getenv("REQUEST_METHOD");
printf("\n\n%s\n", rem);
if (strcmp(rem, "POST") == 0) {
printf("\n<h1>post</h1>\n");
gets( string );
printf( "%s\n", string );
}
printf("<form method=\"post\">\n<input name=\"x\" type=\"text\">\n");
printf("<input type=\"submit\" value=\"send\">\n</form><pre>\n");
char *col= getenv("CONTENT_LENGTH");
printf("CONTENT_LENGTH = %i;\n", atoi(col));
return 0;
}
|
| |
|
|
|
|
|
|
|
для: exp
(27.11.2008 в 03:04)
| | А, это для веб.. можно и без getch | |
|
|
|