Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];

Вниз

Если кто знает в чём дело, помогите ........ ( IdHTTP )   Найти похожие ветки 

 
ctranik   (2004-07-07 14:48) [0]

Здравствуйте
У меня стоит delphi 6

Значит история такая , решил написать собственную качалку сайтов.
Решил использовать компонент IdHttp (закладка Indy Misk)

кнопка "Соединение" (Button1Click) и обработчик IdHTTP1Connected работают нормально
но когда доходит дело до обработчика IdHTTP1Disconnected начинаются проблемы
следущего рода :
-если фаил только создан на диске то обработчик IdHTTP1Disconnected не работает хоть убей
а если фаил уже существует на диске то обработчик IdHTTP1Disconnected работает нормально.

Подскажите почему так происходит
Заранее благодарен.

Ниже приводится код проги

//В этой кнопки загружаются параметры и начинается процесс соединения, я назвал эту кнопку "Соединение"

procedure TForm1.Button1Click(Sender: TObject);
label 1;
var d,n:integer;
begin
if (edit1.Text= "")or (edit2.Text="")or (edit3.Text="") then begin
   messagedlg("введите параметры",mtinformation,[mbOK],0);
   goto 1;
end;

url:=edit3.Text; //URL это глобальная переменная типа string
d:=length(url);
for n:=d downto 1 do
if copy(url,n,1)="/" then url:=copy(url,n+1,d-n) ;
idhttp1.Host:=edit1.Text;
idhttp1.Port:=strtoint(edit2.Text);
idhttp1.Connect;
1:end;

procedure TForm1.IdHTTP1Connected(Sender: TObject);

var
list:TStringList;
Potok:TStringStream;

begin
list:=TStringList.Create;
potok:=TStringStream.Create(DataString); // строковый поток
 list.Clear;
 filename:=url;         // filename глобальная переменная типа string
 idhttp1.Get(url,potok);     //процедура загрузки страницы в поток
 list.Add(potok.DataString); // добавление в ЛИСТ
 list.SaveToFile(filename);  //сохранение в файле
 list.Clear; // очистка
potok.Free; // уничтожение обьекта
list.Free;  // уничтожение обьекта
end;

// В Disconnected хочу выяснить остальные ссылки внутри закаченой страницы
procedure TForm1.IdHTTP1Disconnected(Sender: TObject);
var
DataString, s, url1:string;
key,i,a:integer;
f:system.text;
list:TStringList;

begin
list:=TStringList.Create;

if  fileexists(filename) then begin // проверяет существует такой фаил на диске
assignfile(f,filename);

reset(f);  // открываем фаил

  while not eof(f) do begin
  readln(f,s)  ; //считываем данные

  list.Add(s); //загружаем в ЛИСТ

    for i:=0 to list.Count-1 do begin
     key:=pos("href="",list.Strings[i]); // ищем позицию с которой нчинается слово " href=" "
     if key>0 then url1:=copy(list.Strings[i],key+6,length(list.Strings[i])-key);
    end;
//в этом цикле находится непосредственно сылка и выводится в Memo1
    for a:=0 to length(url1)-1 do begin
     if copy (url1,a,1)=""" then url1:=copy(url1,1,a-1);
      memo1.Lines.Text:=url1;
    end;
  end;
closefile(f);
end;

list.free
end;


 
Reindeer Moss Eater ©   (2004-07-07 14:51) [1]

Боже ж ты мой.


 
Reindeer Moss Eater ©   (2004-07-07 14:59) [2]

Зачем тебе вообще события понадобились?
Я еще понимаю использование OnWork,OnRedirect, etc.

Но OnDisconnect?


 
ctranik   (2004-07-08 10:25) [3]

Reindeer Moss Eater
Ну ты даёш а чем пользоватся если не событиями


 
Reindeer Moss Eater ©   (2004-07-08 10:47) [4]

Головой


 
Reindeer Moss Eater ©   (2004-07-08 10:52) [5]

OnDisconnected - событие, которое генерится если TCP соединение с веб-сервером закрылось.

Теперь скажи мне (хотя можешь и себе) что делать, если сервер умеет поддерживать KeepAlive и не рвет соединение с твоей качалкой файлов после отдания контента?

Хотя это второстепенный вопрос.

Зачем для анализа полученного контента выкачанного синхронным методом завязываться на какое бы то ни было событие?

Если в одной строчке кода есть вызов GET, то ровно на следующей строчке кода у тебя в руках либо готовый контент либо исключительная ситуация.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.035 c
14-1092978882
Cobalt
2004-08-20 09:14
2004.09.12
Выселение ГПНТБ???


3-1092723998
HMT
2004-08-17 10:26
2004.09.12
Подскажите плз как это будет в Interbase SQL


14-1093336923
Dmitry_
2004-08-24 12:42
2004.09.12
Где можно скачать Delphi5?


1-1093858255
mgFox
2004-08-30 13:30
2004.09.12
stdcall и cdecl


1-1093798757
Stas_on
2004-08-29 20:59
2004.09.12
Как зарегистрировать своё расширение из Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский