Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как запустить CGI скрипт из Delphi 
:(
    Опции темы
lmlcel
Дата 4.7.2004, 13:01 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Как запустить CGI скрипт, находящийся на веб сервере, написанный на Perl`e, из Delphi?
  Вверх
p0s0l
Дата 4.7.2004, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Отправь серверу запрос на этот скрипт. Чтобы не морочаться, делай через IdHTTP (вкладка Indy Clients):
Код
var
  Content : string;
begin
 IdHTTP1.Host := 'www.yourwebserver.ru'; // DNS-имя веб-сервера, либо его IP, без указания протокола (http://)
{  IdHTTP1.Port := 80; } // не обязательно, только в случае если порт не 80
 IdHTTP1.Connect;
 Content := IdHTTP1.Get('http://www.yourwebserver.ru/cgi-bin/script1.cgi?param1=value1&param2=value2...'); // указывай полный путь до скрипта с протоколом (http://) и если надо, параметры
 IdHTTP1.Disconnect;
end;

Впрочем, если у тебя нет Indy или не хочешь их юзать - поищи в FAQ, там есть пример посылки запроса через сокеты (вроде Fantasist писал)...




--------------------
С уважением, г-н Посол.
PM   Вверх
lmlcel
Дата 4.7.2004, 14:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо. А как обратно получить параметры?
  Вверх
lmlcel
Дата 4.7.2004, 15:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











ОЙ. Извините, не посмотрел. В content возвращаются параметры. Спасибо!
  Вверх
dr.ZmeY
Дата 4.7.2004, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Политолог
****


Профиль
Группа: Участник Клуба
Сообщений: 3892
Регистрация: 26.3.2002
Где: ..::STALINGRAD::. .

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



создай модуль CGI с именем cgifirst.exe, который будет осуществлять генерацию HTML-страниц на основе информации из базы данных animals.dbf, входящвй в демонстрационный пакет программ Delphi. Для запуска этого модуля нужно выполнить следующие действия:
-установить Web-сервер (Я так понял, у тебя уже есть);
-задать в параметрах проекта путь для выходного каталога (OutPut), где размещаются сценарии;
-создать в среде Delphi новое консольное приложение.
Загрузка модуля cgifirst.exe производится с помощью HTML-страницы, содер-ркащей ссылку:
<р> <а href="http://igin/scripts/cgifirst.exe">
Пример CGI — модуля </а> </р>
Исходный текст программы (консольного приложения) cgiFirst приводится ниже.
Код

program CgiFirst;
{$APPTYPE CONSOLE} uses
Windows, SysOtils, DBTables, DB;
var
// массив для хранения URL CGI-модуля
ScriptName: array [0..100] of Char;
// массив для хранения параметров строки запроса
PathName: array [0..30] of Char;
// массив для хранения типа метода
MethodName: array [0..30] of Char;
// флаг, используемый для возвращения на главную страницу
k:integer;
// внутренняя переменная
ii:integer;
Tablel: TTable;
// Процедура вывода заголовка страницы
procedure Header; forward;
// Процедура вывода окончания страницы
procedure Footer; forward;
// Процедура вывода списка ссылок
procedure ShowList; forward;
// Процедура вывода таблицы данных
procedure ShowTable; forward;
// Процедура вывода результатов запроса
procedure Showquery(it:integer); forward;
// Вывод заголовка страницы
procedure Header;
begin ,
writeln('Content type: text/html');
writeln;
writeln('<HTML> <HEAD>');
writeln('<TITLE> Cgi-приложение </TITLE>');
writeln('</HEAD> <BODY>');
writeln('<H1> Публикация БД CGI-приложением </Н1>');
writeln('<HR>');
end;
// Вывод окончания страницы
procedure Footer;
begin
writeln('<HR>');
writeln('<Center> <b> БД из файла '+
Tablel.TableName + '</b> </H2> </Center>'); writeln('</BODY>'); writeln('</HTML>'); end;
// Вывод списка ссылок procedure ShowList;
var i: integer/begin Table1.First; // Вывод заголовка списка writeln('<caption> <B> <Font size=6> Список животных1 +
'</font> </B> </caption>'}; writeln ('<p> <table borderV); writeln ('<tr> <th>' + 'Данные' + '</th>'); // Вывод списка без последней колонки for i := 0 to Tablel.FieldCount — 2 do begin writeln ('<th>');
writeln ('<a href="' + ScriptName + '/' + Tablel.Fields [i].FieldName + '"> <b>' + Tablel.Fields [i].FieldName + '</b> </a>'); writeln ('</th>'); end;
writeln('</tr> </table>'); writeln('<p> <p> <table border>'); writeln('<tr> <th>'); writeln('<a href="' + ScriptName +
'"> <b> Вернуться назад на основную страницу </b> </a>'); writeln ('</tr> </th>'); writeln ('</table>');
end;
// Вывод таблицы данных procedure ShowTable; var i:  integer/begin Tablel.First;
writeln('<caption> <B> <Font size=6>'  +
'Таблица с данными о животных </Font> </B> </caption>');
writeln('<р>< table border>');
writeln('<tr>'};
// Вывод заголовков таблицы
for i :- 0 to Tablel.FieldCount - 2 do
writeln ('<th>' + Tablel.Fields [i].FieldName + '</th>'); writeln('</tr>'); /I Вывод строк таблицы while not Tablel.EOF do begin
writeln ('<tr>');
for i;= 0 to Tablel.FieldCount - 2 do
writeln ('<td>' + Tablel.Fields [i].AsString + '</td>'); writeln ('</tr>'); Table1.Next; end;
writeln('</table>');
writeln('<p> <p> <table border>');
writeln('<tr> <th>');
// Вывод ссылки на запуск cgifirst.exe без параметров
writeln ('<a href=" ч-ScriptName +
1"> <b> Вернуться назад на основную страницу </Ь> </а>'); writeln ('</tr> </th>'); writeln ('</table>'); end;
// Вывод результатов запроса
procedure Showquery(it:integer);
var i: integer;
begin
Tablel.First;
writeln('<caption> <B> <Font size=6>' +
'Данные о животных </Font> </B> </caption>'); writeln('<p> ctable border>'); writeln('<tr>'); // Вывод заголовка списка
writeln('<th>' + Tablel.Fields[it].FieldName + '</th>'); // Вывод данных требуемой колонки while not Tablel.EOF do begin
writeln ('<td>' + Tablel.Fields [it].AsString + '</td>'); Tablel.Next; end;
writeln('</tr>'); '   . : writeln('</table>'); writeln('<p> <p> <table border>');
writeln('<tr> <th>');
// Вывод специальной ссылки, которая при ее выборе (событие
// onClick) возвращает предьщущую страницу
// ("window.history.back()" — текст на Javascript)
writeln('<a href="" onClick="window.history.backO ">' + ' '<b> Вернуться назад </b> </a>');
writeln ('</tr> </th>');
riteln ('<tr> <th>');
writeln ('<a href="'+ScriptName +
'"> <b> Вернуться назад на основную страницу </b> </а>');
writeln ('</tr> </th>');
writeln ('</table>');
end;
// Главная программа
begin
// Вывод заголовка страницы
Header;
// считывание переменных окружения
// URL
GetEnvironmentVariable('SCRIPT_NAME', ScriptName,
sizeof(ScriptName)); // Параметры из командной строки
GetEnvironmentVariable('PATH_INFO', PathName, sizeof(PathName)); // Создание таблицы Tablel := TTable.Create(nil); try
Tablel.DatabaseName := 'DBDEMOS'; Tablel.TableName := 'Animals.dbf'; Tablel.Open; k:=0;
// Анализ параметров запроса if StrComp(PathName, '/List') = 0 then begin k:=l; ShowList; end
else -if StrComp(PathName, '/Table') = 0 then begin ShowTable; k:=l; end else begin
for ii := 0 to Tablel.FieldCount - 2 do begin if StrComp (PathName, PcharC/' +
Tablel.Fields [ii].FieldName)) = 0) then
begin Showquery(ii);k:=l end end; end; if k = 0 then begin
writeln ('<a href="'+ScriptName + '/List"> <b>' +
'Загрузить список животных </b> </a> <p>'); writeln ('<a href=" '+ScriptName +'/Tab'le"> <b>' + 'Загрузить данные о животных </b> </a> <p>'); end;
// Вьшод окончания страницы Footer; finally
Tablel.Close; Tablel.Free; end;
end.


В зависимости от параметров запроса приведенная программа обеспечивает вод четырех HTML-страниц. При обработке на сервере URL-запроса дида
http://igin/scripts/cgifirst.exe
выводится главная страница, с двумя ссылками 1) список животных и 2) данные о животных

Автор программы В.Гофман


Добавлено @ 15:28
Тьфу... не верно прочитал вопрос... "скрипт на сервере" sad.gif


--------------------
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




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


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

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