Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C++ as CGI 
:(
    Опции темы
Opik
Дата 8.9.2005, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: нет
Всего: 55



Пытаюсь писать на C++ по веб, только учусь. smile
Вот накидал:
Код

#include <stdio.h>
#include <string.h>

int main(int args, char *argv[])
{
      printf("Content-Type: text/html\n\n");
      char out[10000];
      char buff[1000];
      strcpy(out, "");
      for(int i = 0; i < args; i++)
      {
            sprintf(buff, "arg num: %d; arg value: %s<br />\n", i, argv[i]);
            strcat(out, buff);
      }
       printf("%s\n", out);
return 0;
}

http://selecter.vnet.ee/~opik/cgi-bin/test.cgi?
вот пример
http://selecter.vnet.ee/~opik/cgi-bin/test.cgi?test
всё ок
http://selecter.vnet.ee/~opik/cgi-bin/test.cgi?test=query
уже нету второго запроса... что не так? и как можно добиться нужного эффекта и есть ли ошибки в коде?
PM MAIL Skype   Вверх
Mad
Дата 8.9.2005, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

Репутация: 1
Всего: 19



Цитата(Opik @ 8.9.2005, 14:02)
      printf("Content-Type: text/html\n\n");

это тебе не DOS smile в юниксе \n это 0x0a а тебе надо 0x0d 0x0d 0x0a т.е. строка должна быть
Код

 printf("Content-Type: text/html\r\r\n\r\r\n");



--------------------
user posted image
PM MAIL   Вверх
Opik
Дата 8.9.2005, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: нет
Всего: 55



Mad
Спасибо.
А по сути вопроса?
PM MAIL Skype   Вверх
Mad
Дата 8.9.2005, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

Репутация: 1
Всего: 19



Opik
посмотри man по cgi.h или cgi.lib
(щас винда стоит так что сам посмотреть не могу)


--------------------
user posted image
PM MAIL   Вверх
saa
Дата 8.9.2005, 20:01 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











2 Opik

Для того, чтобы получить параметры, переданные задаче методом GET, необходимо получить значение переменной окружения QUERY_STRING.
  Вверх
Opik
Дата 9.9.2005, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: нет
Всего: 55



Цитата
Для того, чтобы получить параметры, переданные задаче методом GET, необходимо получить значение переменной окружения QUERY_STRING

да, это хорошо, но как это сделать? smile какой хеадер нужно подключать для работы getenv?
Добавлено @ 12:08
Нашел smile)
#include <iostream>
#include <cstdlib>

теперь как я понял нужно распарить QUERY_STRING?
PM MAIL Skype   Вверх
nerezus
Дата 3.10.2005, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



Код


#include <cstdlib>
#include <iostream>

// nerezus, 2005

using namespace std;

char * query();
char * remote_addr();
void UrlDecode(char * st);


char * query() {
     char *tempo = malloc(strlen(getenv("QUERY_STRING"))+1);
     strcpy(tempo, getenv("QUERY_STRING"));
     UrlDecode(tempo);
     return tempo;
     }


char * remote_addr() {
     return getenv("REMOTE_ADDR");
     }


char * content_length() {
     return getenv("CONTENT_LENGTH");
     }


void UrlDecode(char * st) {
     char *p=st;
     char hex[3];
     int code;
     do {
         if ( *st == '%') {
              hex[0]=*(++st); hex[1]=*(++st); hex[2]=0; 
              sscanf(hex, "%X", &code);
              *p++=(char) code;}
         else if ( *st == '+') *p++=' ';
         else *p++=*st;
         } while ( *st++ != 0 ); 
     }


int main(int argc, char *argv[])
{
    cout << "Content-type: text/html\n\n";
    
    char *q = query();
    cout  << "You typed <font color=blue> " << q << " </font> in your query <br>\n";
    char *ip = remote_addr();
    cout  << "Your ip is <font color=blue> " << ip << " </font><br>\n";
    
    return EXIT_SUCCESS;
}



2Mad: про \n ты не прав.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Гость_stalker
Дата 4.10.2005, 14:17 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Opik, опасно пишешь smile попробуй вот такой url забить:
http://selecter.vnet.ee/~opik/cgi-bin/test...678901234567890
как минимум узнаешь версию сервера ну ещё кой чего помаленьку.
А там можно уже и эксплоит подыскать подходящий.
  Вверх
Guest
Дата 6.10.2005, 02:16 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











int main (int argc, char **argv, char **envp);

envp = environment parameters
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.