Заставка

Программирование на старых и современных языках, а так-же дизайн

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



CGI на Dev-C++ 5.11

Сообщений 1 страница 5 из 5

1

Давайте создадим свой CGI.
Из Википедии:

CGI (от англ. Common Gateway Interface — «интерфейс общего шлюза») — стандарт интерфейса, используемого внешней программой для связи с веб-сервером.

1. Создадим новый проект, он должен быть Си++ и Console Application:
https://i.ibb.co/NS1scQg/Dev-CPP-CGIDemo-23-04-20-07-2021-min.jpg

2. Напишим следующий код:

Код:
#include <iostream>
#include <cstdlib> 
using namespace std;

int main(int argc, char** argv) {
  cout << "Content-type:text/html\n\n"  << endl; // Говорим что это HTML
  cout << "<html><head><title>Demo CGI</title></head><body>"  << endl; // Основной HTML код
  cout << "Method:" << getenv("REQUEST_METHOD") << ", Parameters:" << getenv("QUERY_STRING") << endl;  // Возвращает метод (GET, POST, итд.) и параметры
  cout << "</body></html>"  << endl; // Конец HTML кода
  return 0;
}

4. Откомпилируем нашу программу.
5. У меня установлен XAMPP, у кого установлен тоже XAMPP нужно файл CGIDemo.exe поместить в папку C:\XAMPP\cgi-bin
6. Запустим XAMPP и Apache.
7. Результат работы:
https://i.ibb.co/gZSbHMB/Dev-CPP-CGIDemo-Run-23-26-20-07-2021-min.jpg

0

2

Улучшим наш код, то что написано выше т.е. cout нужно поместить в блок try catch:

Код:
#include <iostream>
#include <cstdlib> 
using namespace std;

int main(int argc, char** argv) {
  try {
    // Тут код, что выше
   cout << "Content-type:text/html\n\n" // Говорим что это HTML
        << "<html><head><title>Demo CGI</title></head><body>" // Основной HTML код
        << "Method:" << getenv("REQUEST_METHOD") << ", Parameters:" << getenv("QUERY_STRING")  // Возвращает метод (GET, POST, итд.) и параметры
        << "</body></html>"  << endl; // Конец HTML кода
  }
  catch(const exception& e) {
     cout << "Exception " << e.what() << endl; // Если ошибка!
  }
  return 0;
}

0

3

getenv("REQUEST_METHOD") - возвращает GET, POST, итд., getenv("QUERY_STRING") - возвращает то, что после ? знака, getenv("REQUEST_URI") - возвращает полностью URI, getenv("HTTP_COOKIE") - возвращает куки. Если нужно сделать redirect пишите cout << "Location:" << url << "\n" << endl; Если нужно установить куки, то пишите так cout << "Set-Cookie:" << cookie_name <<"=" cookie_value << ";Expires=" << cookie_expires_date << ";\n" << endl;

0

4

Чтобы прочесть POST параметры нужно вызвав этот код getenv("REQUEST_METHOD") удостовериться что метод POST, и получить длинну спомощью getenv("CONTENT_LENGTH"), и использовать cin, допустим:

Код:
string buf;
cin >> buf;

Если работаем с string, то не забываем подключить string см.:

Код:
#include <string>

0

5

Чуть изменим верхний код, иначе ошибку не увидим:

Код:
catch(const exception& e) {
     cout << "Content-type:text/html\n\n"  << "Exception " << e.what() << endl; // Если ошибка!
  }

0