Форум: "Сети";
Текущий архив: 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