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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с методом GET (Indy/ICS), Создание чат-бота 
:(
    Опции темы
KOPOBA
Дата 18.1.2005, 00:13 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Есть желание сделать программу-бота для чата на основе скрипта Voc.php... Функции входа, выхода, отправки сообщений и т.п. делаются достаточно легко с помощью Indy- или ICS- компонентов. Вся загвоздка в том, чтобы заставить бота "видеть" сообщения пользователей. Документ во фрейме с сообщениями пользователей генерируется скриптом tail.php, которому посылается в качестве параметра значение session - уникальный идентификатор сессии для каждого пользователя. Я пытаюсь получить HTML код страницы с сообщениями пользователей, послав запрос:
Код

GET http://chat.mychat.ru/tail.php?session=d3e683aecaf08f77bf84ae56a245c9ad HTTP/1.0

Текст на Delphi процедуры отсылки запроса (для ICS) выглядит так:
Код

httpcli1.Accept:= 'text/html';
httpcli1.AcceptLanguage:= 'ru';
httpcli1.ContentTypePost:= 'application/x-www-form-urlencoded';
httpcli1.Agent:='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; MRA 4.0 (build 00768); .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
httpcli1.NoCache:= True;
httpcli1.Proxy      := '';
httpcli1.ProxyPort  := '80';
httpcli1.URL        := 'http://chat.mychat.ru/tail.php?session=d3e683aecaf08f77bf84ae56a245c9ad';

       try
           httpcli1.Get;
       except
           MessageDlg('Status Code: '+IntToStr(httpcli1.StatusCode)+#13#10+'Reason Phrase: '+httpcli1.ReasonPhrase, MtError, [mbOk], 0);
           Exit;
       end;

Всё делаю, вроде, как следует... Пытаюсь получить документ через httpcli1.RcvdStream, но вот тут и возникает проблема. Дело в том, что программа не прекращает выполнять метод GET. Похоже из-за того, что скрипт постоянно генерирует новый документ. Или что-то в этом роде. Я, честно говоря, в этих тонкостях не разбираюсь. Однако, проблема требует решения, так как событие, возникающее на завершение получения документа, не вызывается. Если во время выполнения запроса вызвать метод httpcli1.Abort, то программа прекращает его выполнять и в полученном потоке я вижу то, что мне нужно - документ с сообщениями пользователей. Однако, при таком обрыве вылетает сообщение об ошибке да и способ это какой-то грязный...

Уважаемые пользователи. Возможно, кто-то из вас может подсказать мне, в чём заключается проблема, почему так происходит и какие существуют возможные методы решения?

PS:
С Indy-компонентами та же проблема...

  Вверх
p0s0l
Дата 18.1.2005, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Перенесено из раздела Дельфи


--------------------
С уважением, г-н Посол.
PM   Вверх
_hunter
Дата 18.1.2005, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



в чем заключается проблема ты и сама нашла smile
а способы решения... для этого нужно бы глянуть формат данных ( сайт у меня не открылся )
а пока могу предложить следующее:
в методе-обработчике OnWork во-первых обрабатывай полученные данные; во вторых записывай последнее сообщение в буффер и при следующем вызове смотри -- последнее сообщение было полученно полностью или нет


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
KOPOBA
Дата 19.1.2005, 04:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











2 _hunter:
Я написала http://chat.mychat.ru, как ссылку на гипотетический чат.
Примеры чатов на voc.php:
http://ruchat.net
http://sniper-chat.fatal.ru/voc.php
http://www.ruchat.net/chat/voc.php
На счёт события OnWork компонента IdHTTP...
Я, допустим, получаю ответ так:
Код

Responce:=IdHTTP1.Get('http://chat.mychat.ru/tail.php?session=d3e683aecaf08f77bf84ae56a245c9ad');

Смогу ли я обработать в событии OnWork этот самый Responce? Или я смогу его обработать только после завершения работы метода Get?
Программа будто подключается к этому скрипту и он её не отпускает, передавая постоянно поток данных от скрипта. Есть ли возможность как-то анализировать этот поток, пока он передаётся? В Indy-компонентах есть некие Intercepts. Можно ли их использовать в данном случае? Если можно, то как? Есть ли примеры их использования в подобных случаях?
  Вверх
KOPOBA
Дата 19.1.2005, 04:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Извините за мультипостинг... Я написала два раза одну ссылку.
Я хотела написать следующие ссылки на чаты:
http://sniper-chat.fatal.ru/voc.php
http://www.ruchat.net/chat/voc.php
http://chat.gameguru.ru/voc.php

  Вверх
_hunter
Дата 19.1.2005, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



Responce обрабатывать не получится ( в обработчик приходят данные, соответствующие текущей операции чтения ) поэтому я и предлагал заполнять буффер самостоятельно
перехватчики в данном случае не нужны.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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