Модераторы: 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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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