Форум: "Сети";
Текущий архив: 2003.03.06;
Скачать: [xml.tar.bz2];
ВнизTidHttp в цикле после неудачного запроса больше не конектится Найти похожие ветки
← →
Grin (2003-01-14 15:59) [0]Цикл
...
1 try
2 AssignFile(B, "htm.txt");
3 Rewrite(B);
4 WriteLn(B,HTTP.Get(url);
5 CloseFile(B);
6 except
7 Memo1.Text := "No conection";
8 LbNCCount.Caption:= IntToStr(c);
9 end;
...
После неудачи в 4-й строке до конца цикла каждый раз вылетает в эксершн стр6.
Вопрос:
Как правильно обойти неудачу в 4-й строке?
Зарание благодарен.
← →
Reindeer Moss Eater (2003-01-14 16:02) [1]Подсказка:
TidHttp никакого понятия о твоем цикле не имеет. И конечно же ошибка связана не с ним. Обрати внимание на освобождение ресурсов.
← →
Reindeer Moss Eater (2003-01-14 16:05) [2]А вообюще лучще сначала делать Get, и только в случае успеха открывать файл.
← →
Chubais (2003-01-14 16:22) [3]ну дык на эксепшне поставь дисконект
← →
Reindeer Moss Eater (2003-01-14 16:26) [4]Chubais ©
Не путай человека.
← →
Grin (2003-01-14 16:32) [5]
> TidHttp никакого понятия о твоем цикле не имеет.
TidHttp поочереди запрашивает урлы из списка. После того как натыкается на неверный урл, всеостальные (по моему даже не проверяет)
> Обрати внимание на освобождение ресурсов.
После HTTP.Free; вылетает ужасня ошибка и все плохо. Что делать??
← →
Reindeer Moss Eater (2003-01-14 16:39) [6]Еще раз:
Для TidHttp абсолютно фиолетово сколько раз ты вызываешь метод GET. Абсолютно. В цикле или вне цикла.
У тебя в одной строке кода два вызова, которые потенциально могут вызвать исключение. С чего ты решил, что результата не достигаешь из-за якобы странного поведения idHTTP в цикле?????
← →
Grin (2003-01-14 16:52) [7]
> У тебя в одной строке кода два вызова, которые потенциально
> могут вызвать исключение. С чего ты решил, что результата
> не достигаешь из-за якобы странного поведения idHTTP в цикле?????
Ну так первые три строчки полюбому выполняются
1 try
2 AssignFile(B, "htm.txt");
3 Rewrite(B);
А HTTP.Get(url)после обращения к неверному урлу на следуйщем круге (и до конца цикла) не достает сайты ....?
← →
Reindeer Moss Eater (2003-01-14 16:55) [8]WriteLn(B,HTTP. Get(url);
Так надеюсь понятно наконец?
← →
Reindeer Moss Eater (2003-01-14 17:06) [9]И еще подумай, будет ли закрыт открытый файл в случае возникновения исключения?
← →
Grin (2003-01-14 17:08) [10]
> Так надеюсь понятно наконец?
Ну какой эксепшн может быть в WriteLn?? Если файл есть.
А вот после HTTP.Get(url) ничего нет и файл в итоге пустой...
← →
Grin (2003-01-14 17:11) [11]
> И еще подумай, будет ли закрыт открытый файл в случае возникновения
> исключения?
Ну выдавалобы I/O Error ...
← →
Chubais (2003-01-14 17:12) [12]и совсем не путаю
у меня было такое - после ошибки дисконект приходилось делать
может я это и неправильно делал, но мне помогало)))
← →
Reindeer Moss Eater (2003-01-14 17:20) [13]>Chubais
Вот кусочек из класса:
procedure TIdCustomHTTP.CheckAndConnect(AResponse: TIdHTTPResponse);
begin
if not AResponse.KeepAlive then begin
Disconnect;
end;
При вызове Get внутри класса вызывается CheckAndConnect.
>Grin © (14.01.03 17:11)
Если в 4 строке исключение, то кто закрывает файл?
← →
Reindeer Moss Eater (2003-01-14 17:22) [14]А вот после HTTP.Get(url) ничего нет и файл в итоге пустой...
Файл пустой не обязательно потому, что Get ничего не вернул.
← →
Grin (2003-01-14 17:30) [15]
> Chubais
Не помогает ...
← →
Grin (2003-01-14 17:34) [16]
> Если в 4 строке исключение, то кто закрывает файл?
Зачем, он перезаписывается на следующем круге....
← →
Chubais (2003-01-14 17:35) [17]2 Reindeer Moss Eater
мб, у мну версия не та была
мб KeepAlive был True
тем не менее я бы на месте грина попробовал..
и давно бы get в строку сделал, чтоб не было толкания на одном месте и выяснения, в чем причина ошиПки
← →
Reindeer Moss Eater (2003-01-14 17:39) [18]Зачем, он перезаписывается на следующем круге....
Grin, тебе не сюда, тебе в патентное бюро надо. Пока не застолбили новейший способ борьбы с потерей ресурсов.
← →
Chubais (2003-01-14 17:41) [19]> Grin © (14.01.03 17:30)
ну тада - F7/F8 тебе помогут
← →
Grin (2003-01-14 17:42) [20]Я иссяк ..........
Я почти уверен, что проблема в TIDHttp. Такое ощющение, что после неудачного запроса он запоминает свое состояние и больше ни чего не конектит .............
Я скоро зДоХнУ..............
← →
Reindeer Moss Eater (2003-01-14 17:43) [21]Таблетки от упрямства не пробовал принимать?
Не в TIDHttp проблема.
← →
Grin (2003-01-14 17:44) [22]
> Grin, тебе не сюда, тебе в патентное бюро надо. Пока не
> застолбили новейший способ борьбы с потерей ресурсов.
Гуд.
Загляну и туда как-нибудь.
← →
Grin (2003-01-14 17:46) [23]
> Таблетки от упрямства
:-)) ок!
← →
Reindeer Moss Eater (2003-01-14 17:48) [24]var
Trafic_Limit : boolean;
Content:string;
Trafic_Limit:=False;
While not Trafic_Limit do
try
Application.ProcessMessages;
Content:=HTTP.Get(url);
Memo1.Lines.Add(Content);
exception
On E:Exception do Memo1.Lines.Text:=E.Message;
end;
← →
Chubais (2003-01-14 18:04) [25]Reindeer Moss Eater (14.01.03 17:39)
подписываюсь))))
← →
Grin (2003-01-14 18:25) [26]
> On E:Exception do Memo1.Lines.Text:=E.Message;
Socket Error # 10053
Software caused connection abort.
?????????????
← →
Grin (2003-01-15 10:56) [27]
> Reindeer Moss Eater (14.01.03 16:02)
> Подсказка:
> TidHttp никакого понятия о твоем цикле не имеет. И конечно
> же ошибка связана не с ним. Обрати внимание на освобождение ресурсов.
Таблетки от упрямства - хорошая штук!!! Спасибо! До скорого!
← →
Reindeer Moss Eater (2003-01-15 11:04) [28]Grin ©
Если есть подозрение, что в той версии Indy, что у тебя, TidHTTP плохо работает при последовательных вызовах методов, то самое простое решение - это создавать новый экземпляр TidHTTP в каждой итерации цикла с последующим убитием его.
← →
Grin (2003-01-15 11:44) [29]
> создавать новый экземпляр
Спасибо, я так и сделал :-))
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.03.06;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.01 c