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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переконект в IdHttp, Как сделать переконект? 
V
    Опции темы
BeePer
  Дата 19.2.2006, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вобщем, есть компонет idhttp.. Один раз выполняет GET/POST запросы на ура, но если в этом же коде (напр Button1.Click) задать ещё один запрос, то прога виснет, а потом выдаёт ошибку, таймаута подключение (типа того что время ожидания закончилось), заметил, что второй раз он пытается приконектиться на локальный йп-шник, а не тот что в коде...
Вот и вопрос: как такое исправить? Кто-нить знает?

И тут же по теме ещё один вопросик:

Код

 http:=TIdHTTP.Create(Self);
  ms := TMemoryStream.Create;
 try
 url := 'http://site.net/scr?123';
    http.Get(img, ms);
Выполняется нормально, а вот такой:
Код

{тоже самое}
url := ss;  //ss : string, та же ссылка, но предварительно выдранная из html
{тоже самое}
Уже не хочет, в чём загвоздка?

Это сообщение отредактировал(а) BeePer - 19.2.2006, 01:47
PM MAIL   Вверх
Snowy
Дата 19.2.2006, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Это обычная загвоздка 9-й Indy.
После отключения, контрол повторному использованию не подлежит.
Создал, использовал, уничтожил. И т.д.
Посмотри поиском по TIdHTTP - во всех примерах я всегда его создаю и уничтожаю.
PM MAIL   Вверх
Демо
Дата 19.2.2006, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

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



Snowy,

Писал я повторно используемый код в Indy9, но сейчас уже не проверить, Indy9 уже нет.
К сожалению, на Indy нельзя писать проеты, имеющие долгий срок жизни, так как любая следующая версия несовместима с ююбой предыдущей. А бывают критические ошибки, когда просто необходимо перейти на следущую версию, что приведет к переделке всего проекта.


--------------------
    
PM MAIL ICQ Skype   Вверх
BeePer
Дата 19.2.2006, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я не в курсе, уничтожать idhttp, это free или destroy?
И после уничтожения.. При создании нового ему надо уже другое имя давать или можно тоже?

Ещё:
Код

http.Get('http://site.net/df?123', ms);
конектится к указанному адресу, а
Код

url:='http://site.net/df?123';
http.Get(url, ms);
начинает конекттиться к локалхосту, и естественно выдаёт ошибку таймаута.. Я так и не понял, как такое исправить?
PM MAIL   Вверх
Snowy
Дата 19.2.2006, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



PM MAIL   Вверх
BeePer
Дата 19.2.2006, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Так, вроде понял.. уничтожение - это free, ничего по вопросу создания нового компонента не нашёл.. ну ладно сам допру..

Но остался ещё один вопрос:
Код

begin
     Memo1.Text   := idhttp1.Get('http://link');
     idhttp1.Free;
{работаем с ответом}
    http:=TIdHTTP.Create(Self);
    ms := TMemoryStream.Create;
  try
    http.Get('http://link', ms);
    ms.Position := 0;
{работаем с ответом}
  finally
    ms.Free;
    http.Free;
  end;
 end;

Первый раз код отрабатывает хорошо, но запустив его ещё раз (нажав кнопку), выдаёт ошибку "Access violation"..
Я так понял, что удаляется какой-то компонент, а при повторном запуске он не создаётся.. но какой и где не знаю..?
Посмотрите, здесь может быть ошибка? или это из-за другого чего-то?

з.ы. не надо меня в поиск посылать, я им сам пробовал, но ничего не нашёл..

Это сообщение отредактировал(а) BeePer - 19.2.2006, 20:28
PM MAIL   Вверх
Snowy
Дата 20.2.2006, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Вообще убери IdHTTP1 с формы.
Объяви его, как локальную переменную в процедуре.
И еще. Нельзя уничтожить объект второй раз.
Сначала создавай, потом уничтожай, но не наоборот.
У тебя он сначала уничтожается, потом создается, потом опять уничтожается.
Вполне понятно, что при втором запуске ты пытаешься уничтожить уже несуществующий объект.
Получаешь ошибку.
Добавлено @ 10:20
Код

var
  http: TIdHTTP;
begin
  http:=TIdHTTP.Create(Self);
  ms := TMemoryStream.Create;
  try
    http.Get('http://link', ms);
    ms.Position := 0;
    Memo1.Lines.LoadFromStream(ms);
{работаем с ответом}
  finally
    ms.Free;
    http.Free;
  end;
end;
А на форму его вообще класть не нужно.
PM MAIL   Вверх
BeePer
Дата 20.2.2006, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Snowy спасиб, те.. получилось))
Осталось два вопроса:
Код

http.Get('http://link', ms);

и
Код

u:='http://link';
http.Get(u, ms);
Оба кода работают нормально, а такой:
Код

{get'аем страничку, парсим, выцепляем url}
//цикл  
u:= memo1.Lines[st];
   ps:= Pos('http://link', u);
    if ps<>0 then begin
    u := copy(u, ps, 10);
http.Get(u, ms);
Уже перестаёт работать (конектится к локалхосту почему-то.. Почему не знаешь?

Спустя несколько часов....
Всё)) Сам сделал:
Код

{get'аем страничку, парсим, выцепляем url}
//цикл 
 u:= memo1.Lines[st];
   ps:= Pos('http://link', u);
    if ps<>0 then begin
    u := copy(u, ps, 10);
url:=u;
http.Get(url, ms);
Правда не знаю почему с заменой переменной работает, кто знает, отпишитесь - охота узнать, а
так тему мона закрывать, вопрос решён))

Это сообщение отредактировал(а) BeePer - 20.2.2006, 23:21
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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