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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Idhttpserver и запросы 
V
    Опции темы
vood
Дата 11.3.2006, 06:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В Idhttpserver можно обрабатывать запросы("www.sss.rrr/?as=as"), но через событие OnCommandGet это не удобно.
есть ли другой способ их обработки?
и еще есть ли другой способ передачи ответа на запрос, кроме AREquestinfo.ContentText?


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
Prof_2000
Дата 11.3.2006, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 26.3.2005
Где: Харьков, Украина

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



К сожалению у самого Idhttpserver таких функциональностей нет, разве что через голые сокеты(еще менее удобно). Но можешь работать с ICS компонентами. Там и настройка более проста, и ответ на запрос чрезвычайно легко организуется...
--------------------
Pereant qui ante nos nostra dixerunt! (лат.)      Да погибнут те, кто раньше нас высказал наши мысли!   
PM MAIL WWW ICQ   Вверх
vood
Дата 11.3.2006, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А где мне их скачать??


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
vood
Дата 13.3.2006, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Кстати как в Idhttpserver передать вместо текста файл?


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
Snowy
Дата 13.3.2006, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Точно также. Только mime type указать другой.
Щас в закромах пример гляну...
Добавлено @ 11:09
Вот пример простенького http сервера:
Код
unit httpserver;

interface

uses SysUtils, Classes, IdHTTPServer, IdCustomHTTPServer, IdTCPServer;

type
  THTTPServer = class
  private
    FPort:   integer;
    FActive: boolean;
    http:    TIdHTTPServer;
    procedure State(activ: boolean);
    procedure SetPort(port: integer);
    procedure OnGet(AThread: TIdPeerThread;
              ARequestInfo: TIdHTTPRequestInfo;
              AResponseInfo: TIdHTTPResponseInfo);
  public
    constructor Create;
    destructor Destroy; override;
    procedure StartServer;
    procedure StopServer;
  published
    property Active: boolean read FActive write State;
    property Port: integer read FPort write SetPort;

  end;


implementation

procedure THTTPServer.StartServer;
begin
  http.DefaultPort:=FPort;
  try
    http.Active:=true;
    FActive:=true;
  except
    FActive:=false;
  end;
end;

procedure THTTPServer.StopServer;
begin
  http.Active:=false;
end;

procedure THTTPServer.State;
begin
  if activ then
    if not Active then StartServer;
  if not activ then
    if Active then StopServer;
end;

procedure THTTPServer.SetPort;
begin
  FPort:=port;
  if Active then begin
    StopServer;
    StartServer;
  end;
end;

constructor THTTPServer.Create;
begin
  Port:=80;
  Active:=false;
  http:=TIdHTTPServer.Create(nil);
  http.ServerSoftware:='Snowy HTTP Server';
  http.OnCommandGet:=OnGet;
end;

destructor THTTPServer.Destroy;
begin
  http.Free;
end;

procedure THTTPServer.OnGet(AThread: TIdPeerThread;
          ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
  s: string;
  fs: TFileStream;
begin
  s:='.'+ARequestInfo.Document;
  fs:=nil;
  try
    try
      fs:=TFileStream.Create(s,$40);
      SetLength(s,fs.size); fs.Read(s[1],fs.Size);
      AResponseInfo.ContentText:=s;
      AResponseInfo.ContentType:=http.MIMETable.GetDefaultFileExt(s);
    except
      AResponseInfo.ResponseNo:=404;
    end;
  finally
    fs.Free;
  end;
end;

end.

Добавлено @ 11:10
Набросал на скорую руку.
Нужно было еще параметр для домашнего каталога сделать.
Вот тут:
Код
  s:='.'+ARequestInfo.Document;
вместо точки нужно поставить домашний каталог.
PM MAIL   Вверх
vood
Дата 15.3.2006, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Snowy, спасибо за пример.
Тут накопились вопросы:
1.Как выглядит http-ответ Idhttpserver-а (пожалуйста покажите место где там AREquestinfo.ContentText)?
2.Почему если Idhttpserver сделать команд хендлер ' GET' он через него не будет обрабатывать запросы?
3.У сессий Idhttpserver тоже есть ContentText но до меня не доходить как сессиями пользоваться.
Так вот вопрос: Как использовать сессии в ответе на запрос?


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
vood
Дата 16.3.2006, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Кстати домашний каталог ружно задать как 'D:\Films' или нет?


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
Snowy
Дата 16.3.2006, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Цитата(vood @ 16.3.2006, 11:36 Найти цитируемый пост)
Кстати домашний каталог ружно задать как 'D:\Films' или нет?
Можно поэксперементировать.
Но лучше будет задавать, как "/Films"
PM MAIL   Вверх
vood
Дата 16.3.2006, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



То есть каталог сервера
Добавлено @ 11:51
Я имею ввиду ,что тот каталог к которому открыт доступ или он являеться корневым сервера нужно указывать ,а не любой на серваке


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
Snowy
Дата 16.3.2006, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



/Films и будет корневым для текущего диска.
Для другого диска будет "E:/Films"
PM MAIL   Вверх
vood
Дата 17.3.2006, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У сессий Idhttpserver тоже есть ContentText но до меня не доходить как сессиями пользоваться.
Так вот вопрос: Как использовать сессии в ответе на запрос?


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
vood
Дата 17.3.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Кстати,Snowy в твоем коде ты забыл сделать AResponseInfo.WriteContent


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
Snowy
Дата 17.3.2006, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Ничего я не забыл. Код полностью рабочий.
PM MAIL   Вверх
vood
Дата 17.3.2006, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Но без записи контента он не проканает
Добавлено @ 12:02
А без этого код выдавал в IE 404
Добавлено @ 12:07
Как выглядит ответ IdHttpServer на запрос (что он посылает в браузер, какой текст)?


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
Snowy
Дата 17.3.2006, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Вот от - контент.
Цитата(Snowy @ 13.3.2006, 11:05 Найти цитируемый пост)
AResponseInfo.ContentText:=s;



Цитата(vood @ 17.3.2006, 12:01 Найти цитируемый пост)
Как выглядит ответ IdHttpServer на запрос (что он посылает в браузер, какой текст)?

Пример гугля:
Цитата
HTTP/1.1 200 OK
Via: 1.0 KM-PROXY3
Content-Length: 1653
Date: Fri, 17 Mar 2006 09:20:13 GMT
Content-Type: text/html
Cache-Control: private
Content-Encoding: gzip
Server: GWS/2.1

Ниже пустая строка. Ниже контент в соответствующем формате.
PM MAIL   Вверх
vood
Дата 17.3.2006, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



то есть хтмл-код


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
Snowy
Дата 17.3.2006, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



В контенте может быть не только html.
html - любая страница. Возьми любую страницу - это и будет пример.
PM MAIL   Вверх
vood
Дата 18.3.2006, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Пасибо, Snowy!



--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
vood
Дата 18.3.2006, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



кстати, из какой папки берет картинки страничка сгенерированная через ContentText(я имею ввиду случаи использования тега img вот так: <img src="Pict.jpg">)?


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
Ground
Дата 19.3.2006, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всмысле без указания каталога картинки?!
Если так, то картинка берется из папки с HTML - страницой.
PM MAIL ICQ   Вверх
vood
Дата 20.3.2006, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А если сгенерирован html-код?
Добавлено @ 11:57
Или код записан в поток соединения?
Добавлено @ 11:57
Из обьекта Threads


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
vood
Дата 20.3.2006, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



да еще какое свойство idhttpserver показывает кол-во соединений?


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
Snowy
Дата 20.3.2006, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Цитата(vood @ 20.3.2006, 11:52 Найти цитируемый пост)
А если сгенерирован html-код?
Из папки, которая является в данный момент текущей (GetCurrentDir, SetCurrentDir)


Цитата(vood @ 20.3.2006, 12:24 Найти цитируемый пост)
да еще какое свойство idhttpserver показывает кол-во соединений?
IdHttpServer1.Threads.LockList.Count;

Модератор: Пожалуйста, один топик - один вопрос.
PM MAIL   Вверх
vood
Дата 21.3.2006, 02:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У меня это свойство вешает сервер
Есть другое?


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
Snowy
Дата 21.3.2006, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Просто после этого нужно сделать UnLock
PM MAIL   Вверх
vood
Дата 22.3.2006, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо, больше вопросов нет!


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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